gezaijianghu 发表于 2014-5-23 20:00:55

王爽汇编第二版第8章实验7------debug做除法时溢出问题

做到cx=6时就溢出,debug不下去了!求高手解答啊~~~

代码:

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'

    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 11452,14430,15257,17800

data ends

table segment

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

table ends


codesg segment

start: mov ax,data
       mov ds,ax
       mov ax,table
       mov es,ax   
       mov bx,0
       mov si,0
       mov di,0
       mov cx,21

   s0: mov ax,                     ;将年份按格式放入表格中
       mov es:,ax
       mov ax,2
       mov es:2,ax



       mov ax,ds:53h            ;将收入按格式放入表格中
       mov es:7h,ax                  ;这里答案是   mov es:5h,ax,个人认为我的代码是正确的
       mov dx,ds:55h
       mov es:5h,dx               ;这里答案是   mov es:7h,ax,个人认为我的代码是正确的


       div word ptr ds:0a7h    ;将平均收入按格式放入表格中
       mov es:0dh,ax

       mov ax,ds:0a7h            ;将人数按格式放入表格中
       mov es:0ah,ax

       add bx,4   
       add di,2
       add si,10h

       loop s0



       mov ax,4c00h
       int 21h

codesg ends

end start

xiaosawanjava 发表于 2014-5-23 20:16:27

我这里有例子
http://bbs.fishc.com/thread-47250-1-1.html

gezaijianghu 发表于 2014-5-23 20:36:47

xiaosawanjava 发表于 2014-5-23 20:16 static/image/common/back.gif
我这里有例子
http://bbs.fishc.com/thread-47250-1-1.html

就我这程序应该是不会出现溢出的啊。

kikiatw 发表于 2014-5-26 14:01:06

本帖最后由 kikiatw 于 2014-5-26 14:05 编辑

mov ax,ds:53h   ;将收入按格式放入表格中
這裡應該是 52H不是53H 你算數有問題, 00-81 共82個空間是放年的

mov es:7h,ax      ;这里答案是   mov es:5h,ax,个人认为我的代码是正确的
這裡應該是 5H, 在data segment 高位放高位, 在es segment 也是高位放高位, 幹嘛反過來?

mov dx,ds:55h 上面定址錯了, 下面跟著錯
mov es:5h,dx   上面高低位錯了, 這裡跟著錯


div word ptr ds:0a7h    ;将平均收入按格式放入表格中 a8h才對

後面不解釋了, 我覺得你前面幾章基礎很薄弱, 我在這裡點醒你吧
1. 假設 SS 定義10h個空間, 那棧頂在哪?
棧頂就在10h, 為什麼呢? 因為堆疊是從 SS:00H ~ SS:0FH 共16個, SS:10H 是第17個也就是棧頂
這樣你看出你的問題在哪了嗎?
你的問題是在於把"數量" 跟內存的起始點搞混了, 內存是 0~~開始放的, 數量是 1 開始數的

2. 假設一個DD 雙字組的型態, 存放在一個內存中, 是怎麼儲存的呢?
舉個例子就用5937000 來當例子好了, 5937000 = 5A9768H
5A9768H 存放在內存中你要把他從低位元四個開始割開, 就是 5AH 與 9768H
依照高位元存放在高記憶體, 低位元存放在低記憶體的原則就是
68,97,5A,00 這樣存放

你把這個數字從 DS 搬移到 ES,
那肯定也是 6897 --> 6897 , 5A00 -->5A00 這種方式, 把他對調就不倫不類了
最後, 請給分, 謝謝!!!

阔怀 发表于 2015-8-11 11:21:12

{:1_1:}
页: [1]
查看完整版本: 王爽汇编第二版第8章实验7------debug做除法时溢出问题