"메시지"블록에 문제가있어 출력됩니다 (print_less, print_more, print_equal, print_final). 정말 문자열을 저장하는 방법을 모르겠다. 그래서 나는 그 중 2 개 (print_less 또는 print_more 또는 print_equal + print_final) 대신 모든 출력을 내 출력으로 가져오고있다.FASM : 문자열 저장 및 콘솔 출력
여기에 코드입니다 :
format ELF64 executable
;=============================================
;================== DATA =====================
;=============================================
segment readable writeable
;=============================================
;=============================================
; variables
;=============================================
a dq 26h
b dq 100h
c dq 4h
d dq 3h
;=============================================
; messages
;=============================================
msg_less db 'a < b',0xA,0
msg_more db 'a > b',0xA,0
msg_equal db 'a = b',0xA,0
msg_final db 'Completed successfully',0xA,0
;=============================================
; message sizes
;=============================================
msg_more_size = $-msg_more
msg_less_size = $-msg_less
msg_equal_size = $-msg_equal
msg_final_size = $-msg_final
;=============================================
;================== CODE =====================
;=============================================
segment readable executable
;=============================================
entry $
_begin:
mov rcx,[a]
cmp rcx,[b]
jl print_less
jg print_more
je print_equal
_final:
mov edx,msg_final_size
lea rsi,[msg_final]
mov edi,1 ; STDOUT
mov eax,1 ; sys_write
syscall
jmp syscall_exit
;=============================================
; print message segment
;=============================================
print_less:
mov edx,msg_less_size
lea rsi,[msg_less]
jmp syscall_msg
print_more:
mov edx,msg_more_size
lea rsi,[msg_more]
jmp syscall_msg
print_equal:
mov edx,msg_equal_size
lea rsi,[msg_equal]
jmp syscall_msg
;=============================================
; syscall segment
;=============================================
syscall_msg:
mov edi,1 ; STDOUT
mov eax,1 ; sys_write
syscall
jmp _final
syscall_exit:
xor edi,edi ; exit code 0
mov eax,60 ; sys_exit
syscall
출력 :
[[email protected] ~]$ fasm ~/workspace/ASM/ASM1/asm.asm && ~/workspace/ASM/ASM1/asm
flat assembler version 1.70.03 (16384 kilobytes memory)
3 passes, 364 bytes.
a < b
a > b
a = b
Completed successfully
Completed successfully
시작 포스트가 업데이트되었습니다. 하단에 출력됩니다. – user1597430
답변을 업데이트했습니다. –
예, 그렇습니다. 감사합니다;) – user1597430