1
예를 들어, 문자열을 1234를 정수 1234로 입력하면 정수 1234로 변환됩니다. 그러나 1234를 입력하면 결과로 12가 나옵니다. 무슨 문제인지 모르겠다.어셈블리에서 정수로의 문자열
%include "asm_io.inc"
segment .bss
string resb 32
segment .text
global main
main:
enter 0,0 ; setup stack frame
pusha
mov edx, 0
mov ecx, 0
mov ebx, 0
repeat: call read_char
sub eax, 48
mov esi, eax
mov eax, ecx
mov ebx, 10
mul ebx
mov ecx, eax
add ecx, esi
mov byte [string+edx], al
cmp al, 0x0a
jne repeat
mov byte [string+edx-1], 0
mov eax, ecx
call print_int
call print_nl
popa
mov eax, 0 ; return value
leave ; leave stack frame
ret
GDB는 훌륭한 디버거입니다. 유용한 기술은 디버거를 사용하여 코드를 단계별로 실행할 때 메모리와 레지스터를 볼 수 있도록하는 것입니다. –
두 가지 문제가 있다고 생각합니다. 당신은'cmp al, 0x0a'을합니다. 줄 바꿈 문자를 테스트하려고 시도했지만 효과적으로 48을 빼서 _AL_을 겹쳐 썼습니다. 그래서 당신은 더 이상'read_char'에 의해 반환 된 원래 값을 비교하지 않습니다. –