将bx中的数据以十进制(无符号)显示

54 阅读1分钟

将bx中的数据以十进制(无符号)显示。(用213、1234、9876、10001和5933做测试)

DATAS SEGMENT
    ;此处输入数据段代码
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
    db 60h dup(?)           ; 为堆栈保留60h字节的未初始化内存
 	top label word          ; “top”标记堆栈的顶部  
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    mov ax,STACKS 	  ; 将STACKS的起始地址加载到AX中
    mov ss,ax         ; 将SS(堆栈段)设置为AX中的值
    lea sp,top        ; 将“top”的地址加载到SP(堆栈指针)

    mov bx,00D5h      ; 将十六进制值00D5h加载到BX中
	mov si,10d        ; 将十进制值10加载到SI中(用于除法)

    xor cx,cx         ; 清除CX
    mov ax,bx         ; 将BX的内容复制到AX中(用于除法)

next:				  ; 除法入栈循环
    mov dx,0          ; 清除DX(高16位用于除法)
    div si            ; 将AX除以SI,商以AX表示,余数以DX表示

    push dx           ; 将余数(当前数字)推到堆栈上
    inc cx            ; CX+1

    cmp ax,0          ; 将AX中的商与0进行比较
    jnz next          ; 如果商不为零,继续除法

print: 				  ; 出栈输出循环
    pop dx            ; 将堆栈顶部弹出到DX(下一个要打印的数字)
    add dl,30h        ; 将DL中的数字转换为ASCII字符

    mov ah,2          ; 选择DOS功能2(字符输出)
    int 21h           ; 调用DOS中断21h打印字符

    loop print        ; 如果CX!=0,则递减CX并重复打印循环

    mov ah,4ch        ; 选择DOS功能4Ch(终止程序)
    int 21h           ; 调用DOS中断21h终止程序
    
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START