汇编语言程序
数制转换
将输入的一个数据以不同进制形式输出。
要求:
(a)所有数字从键盘输入;
(b)输入数据为任意一个小于十万的十进制数据;
(c)将所输入数据以十六进制在屏幕显示输出(即十进制转十六进制)。
; multi-segment executable file template.
data segment
; add your data here!
pkey db "press any key...$"
string db 'please input data: ',0dh,0ah,24h
shuzi dw 0
buffer dw 0 ;输入数字的暂存位置 输入的数字大于10 需要缓冲
string1 db 20h,20h,20h,20h,'output: ',0dh,0ah,24h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
xor ax,ax
mov buffer,ax
lea dx , string
mov ah, 09h
int 21h ;显示请输入数据
mov di , offset shuzi
mov ax , 0
biaohao1:
mov ah,08h
int 21h ; 输入保存在AL中
cmp al,0dh; 输入是回车,直接结束输入
je biaohao4
mov ah,2
mov dl,al ;显示此数
int 21h
sub al,30h
mov ah,0
push ax ; 保存刚输入的数字
mov bx,buffer
mov ax,10
mul bx ;ax=10*buffer
pop bx ; 将上面保存的ax 的值给bx
add ax,bx ;ax=10*buffer+bx(之前的ax) 输入的数字大于10
mov buffer,ax ;将ax 的值给buf
mov [di],ax ;若输入11,循环第一次输入是1,第二次重输入12
jmp biaohao1; 输入大于10 的数字的下一位
biaohao4: ;输入结束
lea dx , string1
mov ah, 09h
int 21h ;显示请输入数据
mov ax,shuzi
push ax
push ax ;保存ax
xor al,al
mov cl,4;;;;;将数字移至低八位判断 12到15
rol ax,cl
;显示al
cmp al,10
jnge biaohao5
add al,7
biaohao5:
add al,30h
mov ah,02
mov dl,al
int 21h
xor al,al
mov cl,4; 8到11
rol ax,cl
cmp al,10
jnge biaohao6
add al,7
biaohao6:
add al,30h
mov ah,02
mov dl,al
int 21h
pop ax ;4dao7
xor ah,ah
mov cl,4
rol al,cl
and al,0Fh ;al中高四位清零
;xianshi
cmp al,10
jnge biaohao7
add al,7
biaohao7:
add al,30h
mov ah,02
mov dl,al
int 21h
pop ax
xor ah,ah
and al,0Fh