用汇编语言编写一个十进制转二进制的成勋
时间: 2023-11-23 15:54:00 浏览: 135
这里提供两个汇编语言编写的十进制转二进制的程序,分别是迭代法和递归法。
迭代法:
1.将十进制数除以2,得到商和余数。
2.将余数存入缓冲区。
3.将商作为新的十进制数,重复步骤1和2,直到商为0为止。
4.将缓冲区中的余数倒序输出,即为二进制数。
<<汇编代码>>
```
.model small
.stack
.data
NUMBER DW 65535
OBUF DB 16 dup(0) ;用于存储要输出的二进制字符
.code
START:
MOV ax,offset @data
MOV ds,ax
MOV ax,NUMBER ;ax存储将要显示的十进制数据
MOV bx,offset OBUF+15 ;将bx作为指针指向缓冲区尾部用于存放地位
MOV cx,2 ;做除2运算
LOOP1:
MOV dx,0 ;被除数高位置0
DIV cx ;相当于ax除以2
ADD dl,30h ;dx中存储是余数(地位),形成余数对应的ASCII码
DEC bx ;指针移动存储这位二进制字符数据
MOV [bx],dl
OR ax,ax ;判断ax是否为0,商是否为0就可以知道是否已经处理完数据
JNZ LOOP1
;输出字符串,调用十号功能调用
MOV dx,bx ;dx指向数据最高位
MOV ah,9
INT 21h
MOV ah,4ch
INT 21h
END START
```
递归法:
1.将十进制数除以2,得到商和余数。
2.将商作为新的十进制数,重复步骤1和2,直到商为0为止。
3.将余数存入缓冲区。
4.将缓冲区中的余数倒序输出,即为二进制数。
<<汇编代码>>
```
.model small
.stack
.data
NUMBER DW 65535
OBUF DB 16 dup(0) ;用于存储要输出的二进制字符
.code
START:
MOV ax,offset @data
MOV ds,ax
MOV ax,NUMBER ;ax存储将要显示的十进制数据
MOV cx,2 ;做除2运算
CALL DIV2
;输出字符串,调用十号功能调用
MOV dx,offset OBUF+15 ;dx指向数据最高位
MOV ah,9
INT 21h
MOV ah,4ch
INT 21h
DIV2 PROC
PUSH AX ;保存寄存器
MOV DX,0 ;被除数高位置0
DIV CX ;相当于ax除以2
OR AX,AX ;判断ax是否为0,商是否为0就可以知道是否已经处理完数据
JNZ DIV2
POP AX ;恢复寄存器
ADD DL,30h ;dx中存储是余数(地位),形成余数对应的ASCII码
DEC DX ;指针移动存储这位二进制字符数据
MOV [OBUF+DX],DL
RET
DIV2 ENDP
END START
```
阅读全文