我正在尝试创建一个以浮点
执行此操作的小型nasm程序while(input <= 10^5) do
begin
input = input * 10
i = i - 1
end
nasm中的等效程序如下:
section .data
input: resd 1
n10: dd 0x41200000 ; 10
_start:
mov eax, 0x43480000 ; eax = 200
mov dword [input], eax ; input = eax = 200
mov edx, 0x49742400 ; 10^5
; %begin
mov ecx, 0 ; i = 0
jmp alpha
alpha:
cmp [input], edx ; input <= 10^5
jle _while
jmp log2
_while:
fld dword [input] ; input
fmul dword [n10] ; input * 10
fst dword [input] ; input = input
dec ecx ; i = i - 1
jmp alpha
_while
循环无限迭代
ecx / i
gards始终相同value = 0
(它被假定为0)并且不会减少
答案 0 :(得分:0)
这对我有用(在DosBox中测试):
org 0x100
bits 16
_start:
mov dword [input], __float32__(99.0)
mov edx, __float32__(10000.0)
mov ecx, 0 ; i = 0
jmp alpha
alpha:
cmp [input],edx ; input <= 10^5
jle _while
jmp log2
_while:
fld dword [input] ; input
fmul dword [n10] ; input * 10
fstp dword [input] ; input = input
inc ecx ; i = i - 1
jmp alpha
log2:
; print the value of cl
mov dl,cl
add dl,'0'
mov ah,2
int 21h
; Exit to DOS
mov ah,0x4c
int 21h
n10: dd 10.0
input: resd 1
注意bits 16
告诉nasm 16位操作数是默认操作数,使用32位操作数的指令应该是前缀。如果你试图在实模式环境中执行它,你的代码就会被视为乱码。
根据您的目标环境,您可能需要使用bits 32
。
另请注意使用浮点文字而不是十六进制值(您的代码中有一个拼写错误,您将其与10 ^ 6而不是10 ^ 5进行比较)。