我正在尝试开发一个基于gui的GDB来调试8086程序。 我使用Runtime.getruntime.exec()执行gdb命令。 我重新定向了stdin& stdout到我gui的文本区域。 我的应用程序工作正常,但如果程序集级程序要求用户输入,它不会等待,我得到分段错误 我尝试运行一个简单的java代码,询问你的名字并打印它。这工作得很好.. 所以我试着在eclipse控制台上运行一个程序集级代码..它也没有等待用户输入.. 所以我认为我的申请没有问题.. 但是如何使我的文本区域等待用户输入? 这是装配级代码的问题吗?
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro read 2
mov rax,0
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
SECTION .data
msg1: db "Enter the string",10
len1: equ $ -msg1
msg2: db "Length is "
len2: equ $ -msg2
msg3: db "It is a palindrome",10
len3: equ $ -msg3
msg4: db "It is not a palindrome",10
len4: equ $ -msg4
msg5: db "Reversed string is",10
len5: equ $ -msg5
nl: db 10
lennl: equ $ -nl
SECTION .bss
str: resb 100
len: resb 4
tlen: resb 4
cnt: resb 4
rstr: resb 100
SECTION .text
global _start
_start:
print msg1,len1
read str,10
;print nl,lennl
mov [len],eax
sub byte [len],1
mov ecx,[len]
mov [tlen],ecx
mov ecx,0
add byte [tlen],30h
print msg2,len2
print tlen,4
print nl,lennl
rev:
mov ecx,[len]
;mov [cnt],ecx
dec ecx
label:
mov esi,str
l1:
inc esi
;dec byte [cnt]
dec ecx
jnz l1
;inc esi
;inc ecx
mov edi,rstr
mov ecx,[len]
;mov [cnt],rcx
;dec byte [cnt]
;dec ecx
loop:
mov bl,[esi]
mov [edi],bl
dec esi
inc edi
;dec byte [cnt]
dec ecx
jnz loop
print msg5,len5
print rstr,10
mov cx,[len]
palin:
mov esi,str
mov edi,rstr
palinloop:
mov bl,[esi]
cmp [edi],bl
jne notpalin
inc edi
inc esi
dec cx
jnz palinloop
jmp ispalin
notpalin:
print nl,lennl
print msg4,len4
jmp exit
ispalin:
print nl,lennl
print msg3,len3
exit:
print nl,lennl
mov eax,1
mov ebx,0
int 80h