0
我正在使用NASM在SASM IDE中編寫以下程序。我有一個變量m沒有被改變只讀(現在)。在div操作之後以某種方式,它看起來像米變化的6至983046.在運行時沒有寫操作時的內存值更改
以下是完整的.ASM代碼:
; TO COMPILE:
; nasm -f elf -g -F stabs lab.asm -l lab.lst
; gcc -m32 lab.o -o lab
global main
extern printf
SECTION .data
m DW 6 ; Number being check for perf median
t DW 0 ; Sum of preceeding numbers
n DW 0 ; Sum of suceeding numbers
d DW 0.5
SECTION .text
main:
; Safe registers are EBX, EBP, ESI, EDI, and ESP.
; Formula to find 1-6 (including the number 6
push message
call printf
add esp, 4
mov ebx, [m]
; Test print variable
push ebx
push dataM ; Needed to format the value as "%d"
call printf
add esp, 8
; Calculate T
mov ebx, [m]
mov edi, [m]
dec ebx
imul ebx, edi
mov [t], ebx
mov ax, [t]
mov bl, 2
div bl
mov [t], ax ; Done Calculating t
mov ebx, [t]
push ebx
push dataM2 ; Needed to format the value as "%d"
call printf
add esp, 8
; This Doesn't work?
mov ebx, [m] ; Value of m has seemingly changed??
push ebx
push dataM2 ; Needed to format the value as "%d"
call printf
add esp, 8
ret
message:
db "Lab_2 Start:", 10,0
dataM:
db "Testing: %d...", 10, 0
dataM2:
db "DEBUG: %d", 10, 0
輸出:
Lab_2 Start:
Testing: 6...
DEBUG: 15
DEBUG: 983046
(預期)輸出:
Lab_2 Start:
Testing: 6...
DEBUG: 15
DEBUG: 6
從小型寄存器移動到大型寄存器時,我認爲它是相關的。 –