分割によって間違った結果が生成される

デビッドアントニオエルモシロソリス

私はアセンブリ言語に不慣れで、問題があります。操作の結果に応じていくつかのLEDをオンにするTASM(DOS)を使用して基本的なアセンブラプログラムを作成しようとしています。除算を除いて、私のすべての操作は機能します。除算を行うと、最初のLEDのみが点灯します。つまり、結果は2進数で1になります。最初の番号に4を入力し、2番目の番号に2を入力すると、結果は2になります。2番目のLEDは、最初のLEDではなくオンになっているはずです。私の部門が正しく機能していないのはなぜですか?

これはコードです:

.model small
.stack 64
.data

Numero1 db 0                
Numero2 db 0                
VariableEspecial db 0       


Mensaje1 db 10,13, "Introduce la primera cifra: -> ", '$'
Mensaje2 db 10,13, "Introduce la segunda cifra: -> ", '$'

Mensaje4 db 10,13, "Otra operacion.. 1 - Si, 2 - No, -> ", '$'
Mensaje7 db 10,13, "Escoge operacion: 1 - Suma, 2 - Resta, 3 - Multiplicacion, 4 - Division, -> ", '$'

.code               
begin proc far

mov ax, @data          
mov ds, ax

Inicio:

    mov ah, 09              
    lea dx, Mensaje1        
    int 21h

    mov ah, 01              
    int 21h

    sub al, 30h             
    mov Numero1, al         

    mov ah, 09              
    lea dx, Mensaje2        
    int 21h

    mov ah, 01              
    int 21h                 

    sub al, 30h             
    mov Numero2, al         

    mov ah, 09              
    lea dx, Mensaje7        
    int 21h

    mov ah, 01              
    int 21h

    cmp al, 31h             
    je Suma

    cmp al, 32h             
    je Resta

    cmp al, 33h             
    je Multiplicacion

    cmp al, 34h             
    je Division

Suma:                       
    mov al, Numero1         
    add al, Numero2         

    jmp Leds                

Resta:                      
    mov al, Numero1         
    sub al, Numero2         

    jmp Leds                

; ------------------------      
    Inicio2:                    
    jmp Inicio                  
; ------------------------

Multiplicacion:             
    mov al, Numero1         
    mul Numero2             

    jmp Leds                

Division:                   
    mov al, Numero1         
    div Numero2             

    jmp Leds                

Leds:                       
    add al, 30h             


    cmp al, 31h     
    je UnLed                

    cmp al, 32h             
    je DosLed               

    cmp al, 33h             
    je TresLed              

    cmp al, 34h             
    je CuatroLed            

    cmp al, 35h             
    je CincoLed             

    cmp al, 36h             
    je SeisLed              

    cmp al, 37h             
    je SieteLed             

    cmp al, 38h             
    je OchoLed              

    cmp al, 39h             
    je NueveLed             

    ;-----------------                      
    Inicio3:                                
    jmp Inicio2                             
    ;-----------------

UnLed:                      
    mov dx, 0378H           
    mov al, 00000001b       
    out dx, al              

    jmp FinalizarOperacion  

DosLed:                     
    mov dx, 0378H           
    mov al, 00000010b       
    out dx, al              

    jmp FinalizarOperacion  

TresLed:                    
    mov dx, 0378H           
    mov al, 00000011b       
    out dx, al              

    jmp FinalizarOperacion  

CuatroLed:                  
    mov dx, 0378H           
    mov al, 00000100b       
    out dx, al              

    jmp FinalizarOperacion  

CincoLed:                   
    mov dx, 0378H           
    mov al, 00000101b       
    out dx, al              

    jmp FinalizarOperacion  

SeisLed:                    
    mov dx, 0378H           
    mov al, 00000110b       
    Out dx, al              

    jmp FinalizarOperacion  

SieteLed:                   
    mov dx, 0378H           
    mov al, 00000111b       
    out dx, al              

    jmp FinalizarOperacion  

OchoLed:                    
    mov dx, 0378H           
    mov al, 00001000b       
    out dx, al              

    jmp FinalizarOperacion  

NueveLed:                   
    mov dx, 0378H           
    mov al, 00001001b
    out dx, al

    jmp FinalizarOperacion  

FinalizarOperacion:         

    mov ah, 09              
    lea dx, Mensaje4        
    int 21h
    mov ah, 01              
    int 21h

    cmp al, 31h             
    mov dx, 0378H           
    mov al, 00000000b       
    out dx, al              

    je Inicio3              

    cmp al, 32h             
    mov dx, 0378H           
    mov al, 00000000b       
    out dx, al              

    je Cerrar               

Cerrar: 
    mov ah, 4ch             
    int 21h                 

    begin endp              
    end
マイケルペッチ

除算の方法に問題があります。ALの8ビット数Numero1)を8ビット値(Numero2)で除算しようとしています。

注意しなければならないのは、DIV命令がすべてのAXを8ビット(バイト)のオペランドで除算することですあなたはセットALをするNumero1いますが、ことを確認していなかったAHレジスタは、あなたが分裂している、これをやっていないことにより、0であった。AXそうでジャンクを持っているAH間違った番号を使用して除算演算の作業を行うことを。

命令セットリファレンスは、DIVについてこれを述べています

符号なしでAXをr / m8で除算し、結果をAL =商、AH =剰余に格納します。

あなたの場合、AHを明示的に0に設定する必要があります。でそれを行うかmov ah, 0、または推奨される代替手段を使用できますxor ah, ahどちらもAHをゼロに設定します。

部門コードは次のようになります。

Division:                   
    mov al, Numero1         
    div Numero2             
    jmp Leds

次のようになります。

Division:
    xor ah, ah                   
    mov al, Numero1         
    div Numero2             
    jmp Leds  

これにより、除算は00000000:AL(Numero1)をNumero2で除算したものになります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

全文検索で間違った結果が生成される

分類Dev

Blender 2.8 python、bisectを使用してオブジェクトを2つに分割すると、間違った結果が生成されます

分類Dev

JavaでLongをDoubleで分割すると、間違った結果が生成されます

分類Dev

日付式に間違った結果が表示される

分類Dev

ffmpeg の連結により、音が出ず、速度が部分的に間違った長すぎる結果が生成されます。

分類Dev

TODAY()関数から値を減算しようとすると、間違った結果が生成されます

分類Dev

合計を使用して関数をプロットすると、間違った結果が生成されます

分類Dev

Pythonで「int」に型キャストすると間違った結果が生成されます

分類Dev

StringBuilderの比較で間違った結果が返される

分類Dev

createFromFormatで間違った結果が表示される

分類Dev

Python:結果が間違った順序で印刷される

分類Dev

GETDATE()をSQL Serverに格納されているGETDATE()と比較した結果が間違っています

分類Dev

自己結合が間違った結果を生成する-SQL

分類Dev

合計時間の計算式で間違った結果が生成されるのはなぜですか?

分類Dev

Python分割関数が間違った結果を表示する

分類Dev

UIColorから色相を取得すると、間違った結果が生成されます

分類Dev

Python:カイ2乗検定で間違った結果が生成される(chi2_contingency)

分類Dev

この計算で間違った結果が生成されるのはなぜですか?

分類Dev

hibernateによって生成された間違ったSQLクエリ

分類Dev

Moment.js:期間に誤った結果が表示される

分類Dev

AMPL IPOPTは、解決結果が「解決」されている間、間違った最適解を提供します

分類Dev

startAtとendAtを使用したFirebaseOrderByKeyで間違った結果が表示される

分類Dev

`time`マクロによって生成された時間と空間の結果を収集しますか?

分類Dev

SQL(Mysql)がORと組み合わされていない、間違った結果

分類Dev

配列を検索すると間違った結果が返される

分類Dev

参加すると間違った結果クエリが作成されます

分類Dev

Python辞書で値を探すと間違った結果が返される

分類Dev

MySQLの複数列検索で間違った結果が返される

分類Dev

Emgu C#を使用してRGBの色相(HSV / HSB)値を取得すると、間違った結果が生成されます

Related 関連記事

  1. 1

    全文検索で間違った結果が生成される

  2. 2

    Blender 2.8 python、bisectを使用してオブジェクトを2つに分割すると、間違った結果が生成されます

  3. 3

    JavaでLongをDoubleで分割すると、間違った結果が生成されます

  4. 4

    日付式に間違った結果が表示される

  5. 5

    ffmpeg の連結により、音が出ず、速度が部分的に間違った長すぎる結果が生成されます。

  6. 6

    TODAY()関数から値を減算しようとすると、間違った結果が生成されます

  7. 7

    合計を使用して関数をプロットすると、間違った結果が生成されます

  8. 8

    Pythonで「int」に型キャストすると間違った結果が生成されます

  9. 9

    StringBuilderの比較で間違った結果が返される

  10. 10

    createFromFormatで間違った結果が表示される

  11. 11

    Python:結果が間違った順序で印刷される

  12. 12

    GETDATE()をSQL Serverに格納されているGETDATE()と比較した結果が間違っています

  13. 13

    自己結合が間違った結果を生成する-SQL

  14. 14

    合計時間の計算式で間違った結果が生成されるのはなぜですか?

  15. 15

    Python分割関数が間違った結果を表示する

  16. 16

    UIColorから色相を取得すると、間違った結果が生成されます

  17. 17

    Python:カイ2乗検定で間違った結果が生成される(chi2_contingency)

  18. 18

    この計算で間違った結果が生成されるのはなぜですか?

  19. 19

    hibernateによって生成された間違ったSQLクエリ

  20. 20

    Moment.js:期間に誤った結果が表示される

  21. 21

    AMPL IPOPTは、解決結果が「解決」されている間、間違った最適解を提供します

  22. 22

    startAtとendAtを使用したFirebaseOrderByKeyで間違った結果が表示される

  23. 23

    `time`マクロによって生成された時間と空間の結果を収集しますか?

  24. 24

    SQL(Mysql)がORと組み合わされていない、間違った結果

  25. 25

    配列を検索すると間違った結果が返される

  26. 26

    参加すると間違った結果クエリが作成されます

  27. 27

    Python辞書で値を探すと間違った結果が返される

  28. 28

    MySQLの複数列検索で間違った結果が返される

  29. 29

    Emgu C#を使用してRGBの色相(HSV / HSB)値を取得すると、間違った結果が生成されます

ホットタグ

アーカイブ