【问题标题】:issues with div in TASMTASM 中的 div 问题
【发布时间】:2013-04-27 21:19:23
【问题描述】:

我的 div 有点问题,我需要一些帮助来解决这个问题,我在 TASM 中有一个应用程序,我必须在一系列数字中找到 3 的倍数,问题是当我执行 div 程序时冻结,我不知道为什么。

我的代码是:

.model small
.stack 1000h
.data

msj1 db 13,10,'Tirame un numero: ','$'
msj2 db 13,10,'ES MULTIPLO DE 3 : ','$'
msj3 db 13,10,'NO ES MULTIPLO DE 3 : ','$'
var1 db ?
cont db 0

.code
.startup

call limpia
mov ah,09h
lea dx, msj1 ;desplegar numero 1:
int 21h

call leer ;lee primer numero
sub al,30h ;restar 30h para obtener el numero
mov var1,al ;lo guardo en var1
mov ah,09h

mov cl,al
mov cont,1

 ciclo:  
            ;push cont
            mov al ,cont
            mov bl,3
            div bl ;this is where the prog freezes , if you comment this line the prog runs

            cmp ah,'0'          
            je multiplo
            jne nomult   

            multiplo :
                mov ah,09h
                lea dx, msj2 ;desplegar numero 2:
                int 21h

                mov dl,cont ;mover al a dl para imprimir
                add dl,30h ;sumar 30 para obtener caracter
                mov ah,02h ;imprimir caracter
                int 21h
                inc cont

            nomult:
                mov ah,09h
                lea dx, msj3 ;desplegar numero 2:
                int 21h     

                mov dl,cont ;mover al a dl para imprimir
                add dl,30h ;sumar 30 para obtener caracter
                mov ah,02h ;imprimir caracter
                int 21h     
                inc cont    

loop ciclo
.exit

limpia proc near
mov ah,00h
mov al,03h
int 10h
ret
limpia endp

leer proc near
mov ah,01h;leer caracter desde el teclado
int 21h;lee primer caracter
ret
leer endp
end

【问题讨论】:

    标签: assembly x86 dos tasm real-mode


    【解决方案1】:

    div bl 正在分割ax,但你只加载al。大概ah 里面有剩余值,所以div 溢出。尝试加载ax,例如使用movzx ax, cont

    另外,学习结合指令集参考使用调试器。

    【讨论】:

      【解决方案2】:

      当被除数为8位时,商将存储在AL中。因此,您需要确保商适合 8 位,否则您的程序将崩溃。

      您可以通过在除法之前清除AH 寄存器来实现此目的,例如使用以下方法之一。

      CBW   ; only if AL is unsigned (00h..7Fh)
      
      ; or..
      
      MOV AH,0
      
      ; or..
      
      XOR AH,AH
      

      【讨论】:

      • 感谢您的所有回答,感谢您的建议,我看到了一些改进
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多