zzxxcc89 发表于 2011-7-24 17:24:01

谁有实验10的第2个问题的代码

最近做到实验10的第3的问题就老是出错。 我自己做出来了实验10的第一个问题,在做下面2个问题的时候就出问题了。都3天了还没解决。所以来论坛看看有高人会实验10的第2个问题不,麻烦把代码发上来我学习一下,实在搞不懂了。

秋的洗炼 发表于 2011-8-5 19:33:18

assume cs:codesg


codesg segment
start: mov ax,4240h
           mov dx,000fh
           mov cx,0ah
           call divdw
          
       mov ax,4c00h
       int 21h
divdw:
    push ax
       
    mov ax,dx
    mov dx,0
       
    div cx
    mov bx,ax
       
    pop ax
        div cx
        mov cx,dx
        mov dx,bx
       
        ret
       
              
codesg ends
end start

zzxxcc89 发表于 2011-8-6 14:47:17

秋的洗炼 发表于 2011-8-5 19:33 static/image/common/back.gif


前面的代码看懂了,后面的代码没看懂,能添加一点注释吗

只是丶梦 发表于 2011-8-6 17:15:31


[*]

assume cs:codesg





codesg segment

start: mov ax,4240h   ;L

         mov dx,000fh    ;H

         mov cx,0ah       ;N

         call divdw         ;调用子程序

         

       mov ax,4c00h

       int 21h

divdw:

    push ax                   ;保存4240H

      

    mov ax,dx               ;把 H 放入ax

    mov dx,0               ;dx清零 不影响

      

    div cx                     ;除以cxax=商dx=余数   当前ax=1dx=5
    mov bx,ax               ;商存放于bx      ax=1 dx=5
      

    pop ax                     ;ax又变回了4240   ax=4240    dx=5

      div cx                   ;再除次 =rem(H/N)的余数*65536也就是dx+L =dx ax 在/N除以cxcx=10

      mov cx,dx         ;cx=余数

      mov dx,bx         ;把刚才的商存回dx也就是int(H/N)*65536 +这句话
                                    ;ax呢 现在是 /N的结果

                                    ;int(H/N)*65536 + /N

      ret

      

            

codesg ends

end start
就是这样了..

zzxxcc89 发表于 2011-8-6 22:06:58

只是丶梦 发表于 2011-8-6 17:15 static/image/common/back.gif
[*]
就是这样了..

看明白了,除完以后,DX还是存储的是高为的商,AX还是存储的低位的商
谢谢耐心的解答,{:5_101:}

只是丶梦 发表于 2011-8-8 09:52:40

:lol嗯呵.一开始我不知道这个是写什么代码..看着看着.突然就知道是除法溢出处理的那个代码了..
页: [1]
查看完整版本: 谁有实验10的第2个问题的代码