被遗忘的指环 发表于 2020-2-22 23:18:14

实验7 其他的都没有问题了 但是 除数 被除数那里有点儿问题

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,        ;设置 数据段的偏移
                mov es:,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,                ;设置收入数量的data段起始地址
                mov es:,ax        ;因为前边循环出来si已经变成4了 那么起始地址就是4+1 第5位 这里为收入的低位
                mov ax,                ;设置收入数量的data段起始地址
                mov es:,ax        ;因为前边循环出来si已经变成4了 那么起始地址就是4+2 第6位 这里为收入的高位
               
                mov ax,        ;设置人员数量的data段起始地址
                mov es:,ax        ;设置目标段 的偏移并且写入 前边已经是 4了 要改写的数据在目标段的10位 所以si+6
               
                mov ax,es:
                mov dx,es:
                div word ptr es:
                mov es:,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:
                mov dx,es:
                div word ptr es:
                mov es:,ax
页: [1]
查看完整版本: 实验7 其他的都没有问题了 但是 除数 被除数那里有点儿问题