Я пытаюсь получить idiv
, работая правильно, и я прочитал, что вы положили то, что хотите разделить , например 25, а затем в ebx
вы помещаете то, что хотите разделить, например, 5 выintel-Based Assembly Язык idiv
idiv ebx
, который затем помещает EAX
= 5, а затем EDX
= 0.
Однако это не делает, что в моей программе вход я делаю
выход:
килобайт: 100000000
мегабайтах: 1869375819
задавался вопросом, что я делаю неправильно здесь?
%include "asm_io.inc"
;
; initialized data is put in the .data segment
;
segment .data
prompt db "Please enter the number of bytes:", 0
param db "1 = Calculate it in kilobytes", 0Ah, "2 = Calculate it in megabytes", 10, 0
output db "Kilobytes: %d", 0Ah, "MegaBytes: %d", 10, 0
;
;
segment .bss
;
input resd 1
input2 resd 1
choice resd 1
;
; code is put in the .text segment
;
segment .text
global asm_main
extern printf
asm_main:
enter 0,0
pusha
mov eax, prompt
call print_string
call read_int
mov [input], eax
mov [input2], eax
sub esp, 10h
push dword [output]
push dword [input2]
push dword [input]
mov eax, param
call print_string
call read_int
cmp eax, 1
je kilobyte; Jump if eax is equal to 1
cmp eax, 2
je megabyte; Jump if eax equal to 2
kilobyte:
pop eax ; Pop input into eax
cdq
mov ebx, 1024 ; Put 1024 into ebx
idiv ebx ; EAX = 100000000/1024 = 97656
mov [input], eax ; Move 97656 into var=input
push dword [input] ; Put into stack
jmp megabyte
megabyte:
pop eax ; Pop input into eax
cdq
mov ebx, 1048576 ; Put 1048576 into ebx
idiv ebx ; EAX = 100000000/1024 = 95
mov [input2], eax ; Move 95 into var=input
push dword [input] ; Put into stack
jmp printOut
printOut:
mov dword [esp], output
call printf
add esp, 4 * 3
add esp, 10h
popa
mov eax, 0
leave
ret
UPDATE
Ну я положил в xor edx, edx
, но я все еще получаю тот же результат, как и раньше. Я заглянул в свою электронную книгу и другие сайты, и она говорит то же самое, поэтому я действительно не знаю, что я делаю неправильно. Как и пробовал маршрут idiv
без везения.
Ничего не называется «Язык ассемблера на базе Intel». Intel имеет множество разных архитектур с соответствующим другим языком ассемблера. Вопрос должен быть тегом с 'x86' –
Проверьте мой ответ о дополнительной информации о печати. – johnfound