鱼C论坛

 找回密码
 立即注册
查看: 2068|回复: 3

汇编语言实验10第三题,代码问题.求大神指导!!!

[复制链接]
发表于 2021-12-26 21:37:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 chunhuaqiuyue 于 2021-12-26 22:33 编辑

assume cs:code,ds:data

data segment
        db 10 dup (0)
data ends

code segment
start:
        mov ax,12666
        mov bx,data
        mov ds,bx
        mov si,0
        call dtoc

        mov dh,8
        mov dl,3
        mov ch,2
        call show_str

        mov ax,4c00h
        int 21h

dtoc:
        mov di,10
s0:
        mov dx,0
        div di    ;商存放在ax中,余数存放在dx中
        mov cx,ax        ;商存放在cx中,用来判断除法结束
        add dx,30h
        mov [si],dl ;将ASCII码保存,注意与数据对应位置是逆序排放
        inc si
        jcxz ok
        jmp short s0

show_str:
        mov ax,0b800h ; set to screen start position
        mov es,ax

        mov bl,dl  ; 解决 后面 30行 mul 后 ,bx会因为保存乘法高位而被置0的问题; 所以先把值存入bl
        mov bh,0
        mov dl,0
        mov dl,dh
        mov dh,0
        mov ax,160 ; 160 bytes per row; 因为一行80个列,每一列 是 16位组成,低8位代表字符 高8位代表颜色属性
        mul dx

        add bx,bx ; mul 2 ; 原因和29行一样

        add ax,bx
        mov bx,ax
        mov ax,cx
        mov cx,0

show_str_s:
        mov al,ds:[si]
        mov cx,si
        mov es:[bx],ax
        jcxz ok
        sub si,1
        add bx,2
        jmp short show_str_s

ok:        ret

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-26 22:00:01 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-26 22:02 编辑

        那还用说,一定是溢出了,就是说商的数值太大,以至于 ax 寄存器无法进行保存。
        十六位的除法是一定会用到 dx 寄存器的,如果你没有用到,在做除法运算前,必须专门将 dx 寄存器的值清零。
dtoc_s1:
        push cx
        mov cx,10
        xor dx,dx        ; 添加此指令
        div cx
        add dl,30h
        mov ds:[bx],dl
        sub bx,1
        pop cx
        loop dtoc_s1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-26 22:16:59 | 显示全部楼层
jackz007 发表于 2021-12-26 22:00
那还用说,一定是溢出了,就是说商的数值太大,以至于 ax 寄存器无法进行保存。
        十六位的 ...

感谢!!
发现了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-26 22:17:38 | 显示全部楼层
jackz007 发表于 2021-12-26 22:00
那还用说,一定是溢出了,就是说商的数值太大,以至于 ax 寄存器无法进行保存。
        十六位的 ...

ok,学到了.感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-30 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表