专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

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

发布时间:2010-06-14 15:51:29 文章来源:www.iduyao.cn 采编人员:星星草
请教一个加法输出问题
一个简单的加法,但考虑了很久都没想明白怎么才能输出结果.求指教.

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     ;显示器输出字符串
    ret
disp_number    endp
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: