간단한 어셈블리 코드를 작성하여 화면에 16 진수 값을 출력하려고합니다. print_screen.asm
은 다른 모듈과 함께 작동하는 두 개의 파일입니다. 16 진수를 문자열로 변환하려고 할 때 문제가 내 논리에 있다고 생각합니다. 내 코드는 다음과 같습니다16 진수를 문자열로 변환하여 인쇄하는 NASM 모듈. 조립하지만 예상대로 작동하지 않습니다
[org 0x7c00]
xor dx,dx
xor ax,ax
xor bx,bx
mov dx, 0x1fb6
call print_hex
jmp endi;
print_hex:
pusha
mov ax,0x0001
and ax,dx
add ah,48
mov byte [HEX_OUT+5],ah
mov ax,0x0010
and ax,dx
add ah,48
mov byte [HEX_OUT + 4],ah
mov ax,0x0100
and ax,dx
add ah,48
mov byte [HEX_OUT + 3],ah
mov ax,0x1000
and ax,dx
add ah,48
mov byte [HEX_OUT + 2],ah
mov bx,HEX_OUT
call print_string
popa
ret
jmp endi
%include "print_string.asm"
endi:
;data
HEX_OUT: db '0x0000',0
SAMPLE: db 'a',0
times 510 - ($-$$) db 0
dw 0xaa55
print_screen.asm
(다른 모듈과 작업) : 위에서
print_string:
pusha
cld
mov ah,0x0e
config: mov al,[bx]
;Comparing the strings
cmp byte [bx],0x00 ;Comparing for null
jne print
je end
print: int 0x10
add bx,1
jmp config
end: popa
ret
당신 그것을 제자리에 두십시오. – Jester
'mov ax, 0x0010;을 할 때 여러분은 어떻게 생각하십니까? 도끼, dx'? 예를 들어 어떤 가치를 부여하고 어떤 결과가 나오는지보십시오. – Jester
@Jester 나는 F. Dang baup을 사용해야합니다. 고마워. 그리고 사실 그 가치를 계속 변화시키고 있습니다. 다시 한번 감사드립니다. –