鱼C论坛

 找回密码
 立即注册
查看: 2155|回复: 0

[学习笔记] 实验7 其他的都没有问题了 但是 除数 被除数那里有点儿问题

[复制链接]
发表于 2020-2-22 23:18:14 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code, ds:data, es:table, ss:stack

data segment
        db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
        db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
        db '1993','1994','1995'
        ;地址是0-53H  
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
        ; 收入来源偏移地址 54H-0a7  到下边应该再+1 因为还有空格  
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
        dw 11542,14430,15257,17800
        ;雇佣人员偏移地址 0a8h-0d1h
data ends

table segment
        db 21 dup ('year summ ne ?? ')
table ends

stack segment
        db 8 dup (0)
stack ends

code segment
start:        mov ax,data        ;既然设置关联了 先把数据传进去
                mov ds,ax         ;用ax中介转换给ds
                mov ax,table        ;设置关联
                mov es,ax        ;这里可以用附加段es 目标数据
                mov bx,0        ;用bx设置为0 bx代表数据的偏移
                mov si,0        ;用si设置为0 代表es段的偏移地址
               
                mov cx,21         ;设置21次写入 es段si的偏移地址
        s:        push cx           ;cx入栈       
                mov cx,2         ;设置2次写入 es段si的偏移地址 因为是用字 所以两次
               
   s0:        mov ax,[bx]        ;设置 数据段的偏移
                mov es:[si],ax        ;设置 目标段的偏移(es)
                add si,2        ;0 2 4 10 12 14 20
                add bx,2        ;2 4 6 8 10 12 14 16 20
                loop s0
               
                mov ax,[bx+54h]                ;设置收入数量的data段起始地址
                mov es:[si+1],ax        ;因为前边循环出来si已经变成4了 那么起始地址就是4+1 第5位 这里为收入的低位
                mov ax,[bx+56h]                ;设置收入数量的data段起始地址
                mov es:[si+2],ax        ;因为前边循环出来si已经变成4了 那么起始地址就是4+2 第6位 这里为收入的高位
               
                mov ax,[bx+0a8h]        ;设置人员数量的data段起始地址
                mov es:[si+6],ax        ;设置目标段 的偏移并且写入 前边已经是 4了 要改写的数据在目标段的10位 所以si+6
               
                mov ax,es:[si+1]
                mov dx,es:[si+2]
                div word ptr es:[si+6]
                mov es:[si+10],ax
       
                add si,12        ;前边两次运算后 si=4 这里+12 正好等于下一个段的开头
                pop cx                ;cx出栈
                loop s

               
                mov ax,4c00h
                int 21h

code ends
end start


以上代码 如果没有 下边这段 运行 正常 但是加上这段 就卡死了 这会儿脑袋有点儿懵  放出来大家看看吧 我写的可能有点儿绕  用字和循环 2个变量+ 偏移地址

                mov ax,es:[si+1]
                mov dx,es:[si+2]
                div word ptr es:[si+6]
                mov es:[si+10],ax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 05:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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