实验要求
1、显示有符号数
2、输入一个数,分别显示它的二进制和十六进制序列
一、程序
1.代码1
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov ax,-123
mov bx,ax
and bx,1000000000000000B
je zheng
push ax
mov dl,'-'
mov ah,2
int 21h
pop ax
neg ax
call output
jmp over
zheng:
push ax
mov dl,'+'
mov ah,2
int 21h
pop ax
call output
over:
MOV AH,4CH
INT 21H
output proc ;ax为入口参数
push ax
push bx
push cx
push dx
;初始化
mov cl,10
mov bl,0
;输出数字
output2:
cmp al,0
je output1
div cl
push ax
add bl,1
mov ah,0
jmp output2
output1:
cmp bl,0
je output3
pop cx
sub bl,1
mov dl,ch
add dl,48
mov ah,2
int 21h
jmp output1
output3:
pop dx
pop cx
pop bx
pop ax
ret
output endp
CODES ENDS
END START
2.代码2
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov ax,10
;调用二进制函数
call binary
;回车换行
mov ax,10
call control
;调用输出十六进制函数
call decimal
MOV AH,4CH
INT 21H
;十进制转为二进制
binary proc ;ax为入口参数
push ax
push bx
push dx
push cx
L1:
rol al,1
mov bl,al
and al,00000001b
mov dl,al
add dl,48
mov ah,2
int 21h
mov al,bl
add cl,1
cmp cl,7
je over
jmp L1
over:
pop cx
pop bx
pop dx
pop cx
ret
binary endp
;十进制转为十六进制
decimal proc ;ax为入口参数
push bx
push cx
push ax
push dx
mov cl,16
mov bl,0
D1:
cmp al,0
je D2
div cl
push ax
add bl,1
mov ah,0
jmp D1
D2:
cmp bl,0
je dover
pop cx
sub bl,1
mov dl,ch
cmp dl,9
ja D3
add dl,48
mov ah,2
int 21h
jmp D2
D3:
add dl,55
mov ah,2
int 21h
jmp D2
dover:
pop dx
pop ax
pop cx
pop bx
ret
decimal endp
;回车换行
control proc
push ax
push dx
mov dl,13
mov ah,2
int 21h
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
control endp
CODES ENDS
END START