在线作业急等!!!!用汇编语言将内存中的16位的有符号二进制数转换为十进制ASCII码形式
要用除法,存商,余数再除,希望有代码段
要用除法,存商,余数再除,希望有代码段
答案:不是上课的作业吗? 你哪个院的啊?这些作业还是得自己写,要不老师问你还是不会。q聊 1211411536 。
其他:这个例子是将16进制数转换为10进制数并输出,其中的子程序便是将16位的二进制数转换为10进制数。希望对你有帮助。
cseg segment
assume cs:cseg
main proc
mov bx,162eh
call tern
mov ah,4ch
int 21h
main endp
;子程序tern的功能:把16位二进制数转换为10进制数
;调用参数:bx为待转换的二进制
tern proc
mov cx,10000
call dec_div
mov cx,1000
call dec_div
mov cx,100
call dec_div
mov cx,10
call dec_div
mov cx,1
call dec_div
ret
tern endp
;子程序dec_div的功能:转换1位10进制并输出
;调用参数:cx中为十进制的位权,作为每次转换的除数
dec_div proc
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_div endp
cseg ends
end main 需要显示吗? 对此十六进制依次求除以10的余数,并将余数加上 30h,直到商为0。最后还要调换所得ASCII码字符的顺序 即把123 变为 321。
123
10 3
--------
12
10 2
--------
1
10 1
--------
0
;名称:dtoc
;功能:将 word 型数据转变为十进制数的字符串,字符串以0为结尾
;参数:(ax)=word 型数据的16位,ds:si指向字符串的首地址。
dtoc:
push di
push dx
push si
mov di,si
trans:
mov dl, 10
div dl ;商存在al中,余数存在ah
add ah,30h ;30h就是 '0'
mov [si],ah
cmp al,0
je dtoc_range
inc si
mov ah,0
jmp trans
dtoc_range:
mov ah,[si]
mov al,[di]
mov [di],ah
mov [si],al
inc di
dec si
cmp di,si
ja dtoc_end
jmp dtoc_range
dtoc_end:
pop si
pop dx
pop di
ret
上一个:汇编问题,请高手指教
下一个:编写8086汇编语言程序 将DX寄存器的内容从地位到高位的顺序分成4组,且将各组分别送到寄存器AL,BL,CL,DL。