鱼C论坛

 找回密码
 立即注册
查看: 1800|回复: 2

[汇编作业] 我的除法指令哪里弄错了

[复制链接]
发表于 2014-10-15 13:23:41 | 显示全部楼层 |阅读模式

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

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

x
assume cs:codesg,ds:data,es:table,ss:zhan
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'

        ;以上是表示21年的21个字符串
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
                ;以上是表示公司每一年的收入
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

        dw 11542,14430,45257,17800

        ;以上是表示21年公司雇员人数的21个word型数据
data ends

zhan segment
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

        dw 11542,14430,45257,17800

        ;以上是表示21年公司雇员人数的21个word型数据
zhan ends
table segment
        db 21 dup('year summ ne ?? ')
table ends
codesg segment
    stack:mov ax,data
          mov ds,ax
          mov bx,208
              mov ax,zhan
          mov ss,ax
          mov sp,42
          mov cx,21
       s0:mov ax,[bx]
          push ax
          sub bx,2
            loop s0
          mov bx,0
          mov cx,21
          mov ax,table
          mov es,ax
          mov si,0         
          mov di,0
        s:mov ax,[bx]
          mov es:[si],ax
          mov ax,[bx+2]
          mov es:[si+2],ax
          mov ax,[bx+84]
          mov es:[si+5],ax
          mov ax,[bx+86]
          mov es:[si+7],ax
          pop ax
          mov es:[si+10],ax
          mov ax,[84+di]
          mov dx,[86+di]
          mov bp,0
          div word ptr ss:[bp]
          mov es:[si+13],ax
          add di,4
          add bx,4
          add si,16
          add dx,2
          add bp,2
          loop s
          mov ax,4c00h
          int 21
codesg ends
end stack
为什么最后除法的值错误,求解     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-15 13:27:48 | 显示全部楼层
你写的这个,没有注释,单词还乱用,太难读了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-15 13:29:00 | 显示全部楼层
;[bx].idata[si]
;将数据段中数据按table段中的格式写入table段中
assume cs:codesg,ds:data,es:table

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'
        ;以上是表示21年的21个字符串,84byte(0-83)
       
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
    ;以上是表示21年公司总收入的21个dword型数据,84byte(84-167)
       
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11452,14430,15257,17800
        ;以上是表示21年公司雇员人数的21个Word型数据,42byte(168-209)

data ends

table segment

    db 21 dup ('year summ ne ?? ')

table ends

stack segment
        dw 16 dup (0)
stack ends

codesg segment
start:
        mov ax,data
        mov ds,ax
        mov bp,0
        mov bx,0
        ;ds:bp指向年份
        ;ds:[bp][84]指向收入
        ;ds:[bx][168]指向人数
       
        ;di控制table的行,[idata]精确控制列
        mov ax,table
        mov es,ax
        mov di,0
       
        ;初始化栈
        mov ax,stack
        mov ss,ax
        mov sp,10h
       
        mov cx,21

s:       
        mov ax,ds:[bp]
        mov es:[di][0],ax                                ;将年份的前两个字节放入第DI行的第1、2列中
        mov ax,ds:[bp][84]
        push ax                                                        ;将收入的前两个字节入栈,即是将收入的低16位入栈
        mov es:[di][5],ax                                ;将收入的前两个字节放入第DI行的第5、6列中

        add bp,2
        mov ax,ds:[bp]
        mov es:[di][2],ax                                ;将年份的后两个字节放入第DI列的第3、4行
        mov ax,ds:[bp][84]
        push ax                                                        ;将收入的高16位字节入栈
        mov es:[di][7],ax                                ;将收入的高16放入第DI行的第7,8列
       
        mov ax,[bx][168]
        mov es:[di][0ah],ax                                ;将人数放入第DI行的第10,11列

        pop dx                                                        ;将收入高16位出栈,放入dx中
        pop ax                                                        ;将收入低16位出栈,放入ax中
        div word ptr es:[di+0ah]                ;将收入除以人数
        mov es:[di][0dh],ax                                ;将商(放在ax中)存入第DI行的第13,14行                       
       
        add bp,2
        add bx,2
        add di,10h                                                ;将DI指向下一行
        loop s
       
        mov ax,4c00h
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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