簡體   English   中英

IDIV 總成 x86

[英]IDIV Assembly x86

我試圖制作一個可以讀取有符號整數並進行加減乘除的計算器。 所以我做了一個 function (recebe_int) 讀取一個 integer (inteiro1),然后我推送它的值並讀取另一個 Z157DB7DF530023575515D366C9B672.672 為了測試操作是否成功,我打印了結果(resultado),因為它是 ASCII 代表。

到目前為止,我唯一的問題是除法操作,其他所有操作都在工作。 當我使用計算器的除法部分時,它會給出隨機結果。

下面是為整數和 IDIV 操作調用 reader function 的代碼:

push inteiro1
push num1
push 11
call recebe_int       
push dword [inteiro1] 

push inteiro2
push num2
push 11
call recebe_int 

pop edx
mov eax, edx
cdq
idiv dword [inteiro2] 

mov dword [resultado], eax

mov eax, 4
mov ebx, 1
mov ecx, resultado
mov edx, 1
int 80h

您沒有提供最小的可重現示例 在以下版本中,我已將您的recebe_int調用(您沒有提供代碼)替換為僅將輸入數字設置為802並且我得到(按預期打印。

extern exit
global main
main:
mov dword [inteiro1], 80
mov dword [inteiro2], 2

push dword [inteiro1] 
pop edx
mov eax, edx
cdq
idiv dword [inteiro2] 

mov dword [resultado], eax

mov eax, 4
mov ebx, 1
mov ecx, resultado
mov edx, 1
int 80h

jmp exit

section .data
inteiro1: dd 0
inteiro2: dd 0
resultado: dd 0

無論您遇到什么問題,都在其他地方。 您將11作為長度傳遞給recebe_int的事實似乎表明您正在嘗試使用字符串進行計算而不先轉換為數字。 此外,使用調試器收集更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM