汇编语言(二十九)之数值的二进制和十进制
给定一个数,输出该数的二进制和十进制数
程序运行:
代码:
datas segment
VAL1 dw 156
datas ends
stacks segment stack
db 100h dup(?)
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
BANDO proc far
start:
push ds
mov ax,0h
push ax
mov ax,datas ;初始化ds
mov ds,ax
push VAL1
call PAIRS
ret
BANDO endp
PAIRS proc near
mov bp,sp
add bp,2
mov ax,[bp]
call OUTBIN ;输出二进制数
call OUTOCT ;输出十进制数
ret 2
PAIRS endp
codes ends
codes1 segment
assume cs:codes1,ds:datas,ss:stacks
OUTBIN proc far uses ax bx cx
mov bx,2 ;除数
mov cx,0 ;计数器,记录数的位数
bin:
xor dx,dx
div bx
push dx ;保存余数
inc cx
cmp ax,0h ;判断被除数是否为0
jnz bin ;若不为0,则循环继续
bin1:
pop dx
add dl,30h
mov ah,2 ;输出各位数字
int 21h
loop bin1
push ds ;输出8个空格
push cs
pop ds
lea dx,space
mov ah,9
int 21h
pop ds
ret
space db ' $'
OUTBIN endp
OUTOCT proc far uses ax bx cx dx
mov bx,8 ;除数
mov cx,0 ;计数器,记录数的位数
oct:
xor dx,dx
div bx
push dx ;保存余数
inc cx
cmp ax,0h ;判断被除数是否为0
jnz oct ;若不为0,则循环继续
oct1:
pop dx
add dl,30h ;输出各位数字
mov ah,2
int 21h
loop oct1
;输出换行
call next_line
ret
OUTOCT endp
next_line proc far uses ax dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
next_line endp
codes1 ends
end BANDO