将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