. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验10.3一个问题  [已解决] 回复[ 5次 ]   点击[ 387次 ]  
1821876578
[帖 主]   [ 发表时间:2011-08-09 15:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-13 17:12
DS=13E3  ES=13D3  SS=13E3  CS=13E4  IP=0024   NV UP EI PL NZ NA PO NC
13E4:0024 50            PUSH    AX
-t

AX=317A  BX=13E3  CX=0099  DX=0000  SP=FFF4  BP=0000  SI=0000  DI=0000
DS=13E3  ES=13D3  SS=13E3  CS=13E4  IP=0025   NV UP EI PL NZ NA PO NC
13E4:0025 B20A          MOV     DL,0A
-t

AX=317A  BX=13E3  CX=0099  DX=000A  SP=FFF4  BP=0000  SI=0000  DI=0000
DS=13E3  ES=13D3  SS=13E3  CS=13E4  IP=0027   NV UP EI PL NZ NA PO NC
13E4:0027 BB0000        MOV     BX,0000
-t

AX=317A  BX=0000  CX=0099  DX=000A  SP=FFF4  BP=0000  SI=0000  DI=0000
DS=13E3  ES=13D3  SS=13E3  CS=13E4  IP=002A   NV UP EI PL NZ NA PO NC
13E4:002A F6F2          DIV     DL
-t

Divide overflow

Program terminated normally


运行到DIV, 为什么不行呢。
1821876578
[第1楼]   [ 回复时间:2011-08-09 15:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-13 17:12
程序还没执行到最后。
1821876578
[第2楼]   [ 回复时间:2011-08-09 15:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-13 17:12
这是我的程序,还没完善。
 assume cs: code
 
 data segment
 
      db 10 dup (0)
          
 data ends
 
 code segment
 
      start: mov ax, 12666
                 mov bx, data
                         mov ds, bx
                         mov si, 0
                         call dtoc
                         
                         mov dh, 8
                         mov dl, 3
                         mov cl, 2
                         call show_str
                         
                         mov ah, 0
                         int 16h
                         
                         mov ax, 4c00h
                         int 21h
                                                  
           dtoc: push bx
                 push si
                         push dx
                         push cx
                         push ax
                         mov dl, 10         ;设置dl为除数. 
                 mov bx, 0
                         
          yushu: div dl         ;商al,余数ah.
             mov cl, al
                         sub ch, ch     ;商的值给cx.
                         
                         jcxz s        ;不为0继续下一条,为0跳到s.
                         add ah, 30h
                         mov [si], ah   ;余数ah赋值给ds:[si].
                         inc si
                         mov ah, 0
                         jmp short yushu
                         
                  s: mov byte ptr [si+1], 0
                     mov al, [si]
                     mov ah, [bx]
             mov [si], ah
             mov [bx], al
             dec si
                         inc bx             ;置换序号.
                         mov cx, si
                         sub cx, bx
                         jcxz short k
                         jmp short s
                         
                  k: pop ax
                     pop cx
                     pop dx
                         pop si
                         pop bx
                         ret
                         
   show_str: push dx
                         push cx
                         push si
                         
             sub dh, 1
             sub dl, 1
             mov al, 160
                         mul dh
                         add dl, dl
                         sub dh, dh
                         add dx, ax
                         mov bx, dx
                         mov di, 0
                         mov al, cl
                         
        change:         mov cl, [si] 
                         sub ch, ch
                         jcxz ok
                         mov es: [bx+di], cl
                         mov es: [bx+di+1], al
                         inc si
                         add di, 2
                         jmp short change
                         
                 ok:pop si
                    pop cx
                        pop dx
                        
                    ret
                        
 code ends
 
 end start
licker
[第3楼]   [ 回复时间:2011-08-10 11:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-05-08 00:01
不能用8位除法运算,因为:12666=317A
改为16位。
1821876578
[第4楼]   [ 回复时间:2011-08-10 16:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-13 17:12
谢谢上面的兄弟。我已经知道了。
1821876578
[第5楼]   [ 回复时间:2011-08-10 16:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-13 17:12
此贴由 贴主 于 [ 2011-08-10 16:45 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved