首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

请问一个加法输出有关问题

2012-02-29 
请教一个加法输出问题一个简单的加法,但考虑了很久都没想明白怎么才能输出结果.求指教.data segmentnum1 d

请教一个加法输出问题
一个简单的加法,但考虑了很久都没想明白怎么才能输出结果.求指教.

data segment
num1 db 39
num2 db 17
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax

mov al,[num1]
mov bl,[num2]
add al,bl
daa
 ;这里该怎么写代码才能正确输出得到的56呢?


mov ah,4ch
int 21h
code ends
end start

[解决办法]
除10取模,倒序输出。
[解决办法]
你想要这个输出结果干什么?显示就必须转换成BCD,自己做个小函数也行,就是十六进制变换,如果你想得到0x56H,用楼上的方法就行或者自己弄个小函数实现!
[解决办法]

Assembly code
;---------------------------------; 过程名:disp_number; 功能:将bx中的无符号整数转换成十进制串并送屏幕输出; 输入参数:bx = 要转换并输出的数据(无符号整数); 返回:无;---------------------------------disp_number proc near    ;obuf是存放转换后的串的    ;首先将这个串的最后一个字节送入串结束符'$'    mov si, offset sAscii+5 ;让si指向最后一个字节    mov byte ptr [si] ,'$'  ;obuf的最后一位放'$'    dec si                  ;修正si,使其指向要输出的数字串的个位数位置    mov cx,10               ;设置cx等于除数10     mov ax,bx               ;bx即为要输出的数,送ax,作为被除数again:    mov dx,0    ;无符号数扩展,它下面用来存放余数    div cx      ;dx:ax := ax/cx(结果:dx=余数,ax=商)    add dl,30h  ;把余数转换为相应的ASCII码    mov [si],dl ;存进相应的位置(因为是碾转除,dl第一次得个位,第二次得十位...)    dec si      ;调整存放ASCII数据的指针(注意是减1,即由个位调整为十位...)    cmp ax,0    ;是0吗(经过碾转除以后,商可都除尽吗?0表示商没有了)    jnz again   ;是就跳转进入下一循环(即商还有就再进入循环做除法)                ;否则没有了,就准备输出转换后的串    inc si      ;修正输出的串的首地址(上面si向左移了一位,可是没用到,所以再调回来)    mov dx,si   ;首地址送dx    mov ah,9    int 21h     ;显示器输出字符串    retdisp_number    endp 

热点排行