[英]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
調用(您沒有提供代碼)替換為僅將輸入數字設置為80
和2
並且我得到(
按預期打印。
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.