一 代码实现
DATAS SEGMENT
org 2000h
num dw 65535
org 2010h
res db 5 dup(?)
db '$'
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX ;设计数据段
mov SI,2000h ;结果存放指针
mov AX,[SI] ;把存放结果的指针的地址传给AX
mov DI,2010h ;用于显示的数据的ASCII码的存放指针
mov bx,10000d ;2字节数小于10000
xor dx,dx;异或运算相当于将dx置0
div bx ;余数在dx中
add al,30h ;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
mov [DI],al ;十进制最高位
inc cx ;自增指令,使CX自增,读取下一位数据
inc DI ;使指针DI自增1,指向存储下一位数字的地址
mov ax,dx;把余数传给AX
mov bx,1000d;除数
xor dx,dx;异或运算相当于将dx置0
div bx ;余数在dx中
add al,30h;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
mov [DI],al ;十进制次高位
inc cx ;自增指令,使CX自增,读取下一位数据
inc DI ;使指针DI自增1,指向存储下一位数字的地址
mov ax,dx;把余数传给AX
mov bx,100d;除数
xor dx,dx;异或运算相当于将dx置0
div bx ;余数在dx中
add al,30h;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
mov [DI],al ;十进制第3位
inc cx;自增指令,使CX自增,读取下一位数据
inc DI;使指针DI自增1,指向存储下一位数字的地址
mov al,dl;把余数传给AX
mov bl,10d;除数
div bl ;余数在ah中
add al,30h ;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
mov [DI],al ;十进制第4位
inc cx;自增指令,使CX自增,读取下一位数据
INC DI;使指针DI自增1,指向存储下一位数字的地址
add ah, 30h;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
mov [DI],ah ;十进制最低位
LEA DX,res;把显示的ASCII的存储器偏移地址传给DX用于显示
MOV AH,9;调用9号功能在屏幕上显示
INT 21H
MOV AH,8;无回显键盘输入
INT 21H
MOV AH,4CH;返回DOS
INT 21H
CODES ENDS
END START
可以看到从地址2010h开始存储的分别是36h,35h,35h,33h,35h,对应的是字符6,5,5,3,5.与num存储的十进制65535一致,结果正确。
把num的值改为12345,运行结果图如下