汇编学习第十章实验[除法溢出]

学习第十章内存溢出遇到的麻烦:不理解公式X/N=int(H/N)*10000h+[rem(H/N)*10000h+L]/N

在汇编中溢出公式计算中: 结果的高八位dx=int(H/N)   低八位ax=int([rem(H/N)*10000h+L]/N) 

                 余数cx=rem([rem(H/N)*10000h+L]/N)

实际计算时:      高位dx的值*10000h加上ax的值

 

 1 assume cs:daima
 2 daima segment
 3 kaishi:mov ax,4240H
 4 mov dx,000FH
 5 mov cx,0AH
 6 call divdw
 7 mov ax,4c00h
 8 int 21h
 9 
10 divdw:
11 push bx   
12 push ax
13 mov ax,dx
14 mov dx,0
15 
16 div cx           ;计算int(H/N)*10000h 其中cx为除数16位则 则被除数为32位ax和dx,ax低八位,dx高八位,

17 mov bx,ax ;将H/n的商给bx 18 19 pop ax ;取出栈中的L, 20 div cx ;计算[rem(H/N)*10000h+L]/N 此时DX为H/n的余数0005 也就等于公式rem(H/N)*10000h,而加上低位的ax后就为该公式[rem(H/N)*10000h+L]/N 21 22 mov cx,dx 23 mov dx,bx 24 pop bx 25 ret 26 daima ends 27 end kaishi

在编写程序出现的错
1) 将;错写为;会c出现out of memory的错误

2)简答的语法规则错误,div指令要求除数和被除数不对等匹配,mul要求对等匹配位数相同

posted @ 2013-02-21 04:22  Bug Man  阅读(218)  评论(0)    收藏  举报