我今天正在做一些編碼,並在其他主題的幫助下,我試圖做我自己的程序。它的想法是將我在開始時的值(ascii)改爲正常值。所以,我想什麼控制檯看到:32位Linux x86彙編代碼和垃圾在輸出
- 號[A-1,...,Z-26]
輸出,當我進入一個是1, B.將2等 我得到的輸出是噸垃圾..
這裏是我的代碼:
SYSCALL = 0X80
SYSEXIT = 1
SYSREAD = 3
SYSWRITE = 4
STDIN = 0
STDOUT = 1
.data
.align 32
NUMBER_MAXLEN = 2
NUMBER: .space NUMBER_MAXLEN
NUMBER_LEN: .long 0
MSG_NUMBER: .ascii "Number [A-1, .., Z-26] "
MSG_NUMBER_LEN = . - MSG_NUMBER
.text
.global _start
_start:
#show
mov $SYSWRITE, %eax
mov $STDOUT, %ebx
mov $MSG_NUMBER, %ecx
mov $MSG_NUMBER_LEN, %edx
int $SYSCALL
#read
mov $SYSREAD, %eax
mov $STDIN, %ebx
mov $NUMBER, %ecx
mov $NUMBER_MAXLEN, %edx
int $SYSCALL
#length
sub $1, %eax
mov %eax, NUMBER_LEN
#Change to normal value
xor %eax, %eax
movb NUMBER, %al
sub $'A', %al
add $1, %al
movb %al, NUMBER
#Print
mov $SYSWRITE, %eax
mov $STDOUT, %ebx
mov $NUMBER, %ecx
mov $NUMBER_LEN, %edx
int $SYSCALL
END:
mov $SYSEXIT, %eax
int $SYSCALL
我幹什麼什麼克錯了?怎麼可能修好?
我下NUMBER檢查(使用gdb)值,和後(子$ 'A',%人 加$ 1%人 MOVB%人,NUMBER),它像68000,而不是1 ..爲什麼? – 2013-03-24 15:18:17