王爽汇编第二版第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
我这里有例子
http://bbs.fishc.com/thread-47250-1-1.html 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: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 這種方式, 把他對調就不倫不類了
最後, 請給分, 謝謝!!!
{:1_1:}
页:
[1]