assembly8_10
实验报告
实验内容
运行并验证Blum’s Book: Sample programs in Chapter 08, 10
实验环境
Ubuntu 20.04.2.0(64位)
实验过程
一. Sample programs in Chapter 08
(一)addtest1.s
命令行:
$ as -gstabs --32 -o addtest1.o addtest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o addtest1 -lc addtest1.o
$ gdb -q addtest1
输出结果:
Reading symbols from addtest1...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file addtest1.s, line 9.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/addtest1 Breakpoint 1, _start () at addtest1.s:9
9 movl $0, %eax
(gdb) n
10 movl $0, %ebx
(gdb) n
11 movl $0, %ecx
(gdb) n
12 movb $20, %al
(gdb) n
13 addb $10, %al
(gdb) n
14 movsx %al, %eax
(gdb) n
15 movw $100, %cx
(gdb) n
16 addw %cx, %bx
(gdb) n
17 movsx %bx, %ebx
(gdb) n
18 movl $100, %edx
(gdb) n
19 addl %edx, %edx
(gdb) n
20 addl data, %eax
(gdb) n
21 addl %eax, data
(gdb) n
22 movl $1, %eax
(gdb) print $eax
$1 = 70
(gdb) print $ebx
$2 = 100
(gdb) print $ecx
$3 = 100
(gdb) print $edx
$4 = 200
(gdb) x/d &data
0x804b000: 110
(二)addtest2.s
命令行:
$ as --32 -gstabs -o addtest2.o addtest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o addtest2 -lc addtest2.o
$ gdb -q addtest2
输出结果:
Reading symbols from addtest2...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file addtest2.s, line 9.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/addtest2 Breakpoint 1, _start () at addtest2.s:9
9 movl $-10, %eax
(gdb) n
10 movl $-200, %ebx
(gdb) n
11 movl $80, %ecx
(gdb) n
12 addl data, %eax
(gdb) n
13 addl %ecx, %eax
(gdb) n
14 addl %ebx, %eax
(gdb) n
15 addl %eax, data
(gdb) n
16 addl $210, data
(gdb) n
17 movl $1, %eax
(gdb) print $eax
$1 = -170
(gdb) print $ebx
$2 = -200
(gdb) print $ecx
$3 = 80
(gdb) print $edx
$4 = -134339888
(gdb) x/d &data
0x804b000: 0
(三)addtest3.s
1.原:
命令行:
$ as --32 -o addtest3.o addtest3.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o addtest3 -lc addtest3.o
$ ./addtest3
$ echo $?
输出结果:
0
2.改:
将 movb $100, %al
改为 movb $10, %al
后再进行实验:
命令行:
$ as --32 -o addtest3.o addtest3.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o addtest3 -lc addtest3.o
$ ./addtest3
$ echo $?
输出结果:
200
(四)addtest4.s
1.原:
命令行:
$ as --32 -o addtest4.o addtest4.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o addtest4 -lc addtest4.o
$ ./addtest4
输出结果:
The result is 0
2.改:
将
movl $-1590876934, %ebx
movl $-1259230143, %eax
改为
movl $-190876934, %ebx
movl $-159230143, %eax
后再进行实验:
命令行:
$ as --32 -o addtest4.o addtest4.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o addtest4 -lc addtest4.o
$ ./addtest4
输出结果:
The result is -350107077
(五)adctest.s
1. 运行
命令行:
$ as --32 -gstabs -o adctest.o adctest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o adctest -lc adctest.o
$ ./adctest
输出结果:
The result is 12984400543
2. 调试
命令行:
$ gdb -q adctest
输出结果:
Reading symbols from adctest...
(gdb) break *_start+1
Breakpoint 1 at 0x8049031: file adctest.s, line 12.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/adctest
The result is 14188053504
[Inferior 1 (process 4500) exited normally]
问题: 无法调试
解决方法: 在 _start:
后加一行 nop
后成功进行调试。
命令行:
$ as --32 -gstabs -o adctest.o adctest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o adctest -lc adctest.o
$ gdb -q adctest
输出结果:
Reading symbols from adctest...
(gdb) break *_start+1
Breakpoint 1 at 0x8049031: file adctest.s, line 13.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/adctest Breakpoint 1, _start () at adctest.s:13
13 movl data1, %ebx
(gdb) n
14 movl data1+4, %eax
(gdb) n
15 movl data2, %edx
(gdb) n
16 movl data2+4, %ecx
(gdb) n
17 addl %ebx, %edx
(gdb) info reg
eax 0x1 1
ecx 0x1 1
edx 0x55acb400 1437381632
ebx 0xb041869f -1337882977
esp 0xffffd1f0 0xffffd1f0
ebp 0x0 0x0
esi 0xffffd1fc -11780
edi 0x8049030 134516784
eip 0x8049048 0x8049048 <_start+24>
eflags 0x282 [ SF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
(gdb) n
18 adcl %eax, %ecx
(gdb) n
19 pushl %ecx
(gdb) info reg
eax 0x1 1
ecx 0x3 3
edx 0x5ee3a9f 99498655
ebx 0xb041869f -1337882977
esp 0xffffd1f0 0xffffd1f0
ebp 0x0 0x0
esi 0xffffd1fc -11780
edi 0x8049030 134516784
eip 0x804904c 0x804904c <_start+28>
eflags 0x206 [ PF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
(六)subtest1.s
命令行:
$ as -gstabs --32 -o subtest1.o subtest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o subtest1 -lc subtest1.o
$ gdb -q subtest1
输出结果:
Reading symbols from subtest1...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file subtest1.s, line 9.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/subtest1 Breakpoint 1, _start () at subtest1.s:9
9 movl $0, %eax
(gdb) n
10 movl $0, %ebx
(gdb) n
11 movl $0, %ecx
(gdb) n
12 movb $20, %al
(gdb) n
13 subb $10, %al
(gdb) n
14 movsx %al, %eax
(gdb) n
15 movw $100, %cx
(gdb) n
16 subw %cx, %bx
(gdb) n
17 movsx %bx, %ebx
(gdb) n
18 movl $100, %edx
(gdb) n
19 subl %eax, %edx
(gdb) n
20 subl data, %eax
(gdb) n
21 subl %eax, data
(gdb) print $eax
$1 = -30
(gdb) x/d &data
0x804b000: 40
(gdb) n
22 movl $1, %eax
(gdb) print $eax
$2 = -30
(gdb) x/d &data
0x804b000: 70
(七)subtest2.s
1. 运行
命令行:
$ as --32 -gstabs -o subtest2.o subtest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o subtest2 -lc subtest2.o
$ ./subtest2
$ echo $?
输出结果:
0
2. 调试
命令行:
$ gdb -q subtest2
输出结果:
Reading symbols from subtest2...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file subtest2.s, line 6.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/subtest2 Breakpoint 1, _start () at subtest2.s:6
6 movl $5, %eax
(gdb) n
7 movl $2, %ebx
(gdb) n
8 subl %eax, %ebx
(gdb) n
9 jc under
(gdb) print $ebx
$1 = -3
(八)subtest3.s
1.原:
命令行:
$ as --32 -gstabs -o subtest3.o subtest3.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o subtest3 -lc subtest3.o
$ ./subtest3
输出结果:
The result is 0
2.改:
将 movl $1259230143, %eax
改为 movl $-1259230143, %eax
后再进行实验:
命令行:
$ as --32 -gstabs -o subtest3.o subtest3.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o subtest3 -lc subtest3.o
$ ./subtest3
输出结果:
The result is -331646791
(九)sbbtest.s
命令行:
$ as --32 -gstabs -o sbbtest.o sbbtest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o sbbtest -lc sbbtest.o
$ ./sbbtest
输出结果:
The result is -1519702687
(十)multest.s
命令行:
$ as --32 -gstabs -o multest.o multest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o multest -lc multest.o
$ gdb -q multest
输出结果:
Reading symbols from multest...
(gdb) break *_start +1
Breakpoint 1 at 0x8049031: file multest.s, line 15.
(gdb) n
The program is not being run.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/multest Breakpoint 1, _start () at multest.s:15
15 movl data1, %eax
(gdb) n
16 mull data2
(gdb) n
17 movl %eax, result
(gdb) n
18 movl %edx, result+4
(gdb) n
19 pushl %edx
(gdb) print $eax
$1 = 706134096
(gdb) print $edx
$2 = 12
(gdb) x/gd &result
0x804b01c: 52245741648
(gdb) x/8b &result
0x804b01c: 80 -64 22 42 12 0 0 0
(gdb) print/x $eax
$6 = 0x2a16c050
(gdb) print/x $edx
$7 = 0xc
(gdb) x/8b &result
0x804b01c: 0x50 0xc0 0x16 0x2a 0x0c 0x00 0x00 0x00
(十一)imultest.s
命令行:
$ as --32 -gstabs -o imultest.o imultest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o imultest -lc imultest.o
$ gdb -q imultest
输出结果:
Reading symbols from imultest...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file imultest.s, line 13.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/imultest Breakpoint 1, _start () at imultest.s:13
13 movl value1, %ebx
(gdb) n
14 movl value2, %ecx
(gdb) n
15 imull %ebx, %ecx
(gdb) n
16 movl value3, %edx
(gdb) n
17 imull $2, %edx, %eax
(gdb) n
18 movl $1, %eax
(gdb) info reg
eax 0x320 800
ecx 0xfffffea2 -350
edx 0x190 400
ebx 0xa 10
(十二)imultest2.s
命令行:
$ as --32 -gstabs -o imultest2.o imultest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o imultest2 -lc imultest2.o
$ ./imultest2
$ echo $?
输出结果:
1
(十三)divtest.s
命令行:
$ as --32 -gstabs -o divtest.o divtest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o divtest -lc divtest.o
$ ./divtest
输出结果:
The quotient is 333, and the remainder is 10
(十四)saltest.s
命令行:
$ as --32 -gstabs -o saltest.o saltest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o saltest -lc saltest.o
$ gdb -q saltest
输出结果:
Reading symbols from saltest...
(gdb) break *_start +1
Breakpoint 1 at 0x8049001: file saltest.s, line 9.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/saltest Breakpoint 1, _start () at saltest.s:9
9 movl $10, %ebx
(gdb) n
10 sall %ebx
(gdb) n
11 movb $2, %cl
(gdb) n
12 sall %cl, %ebx
(gdb) n
13 sall $2, %ebx
(gdb) n
14 sall value1
(gdb) n
15 sall $2, value1
(gdb) n
16 movl $1, %eax
(gdb) info reg
eax 0x1c 28
ecx 0x2 2
edx 0xf7fe22d0 -134339888
ebx 0x140 320
(gdb) x/d &value1
0x804b000: 200
(十五)aaatest.s
命令行:
$ as --32 -gstabs -o aaatest.o aaatest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o aaatest -lc aaatest.o
$ gdb -q aaatest
输出结果:
Reading symbols from aaatest...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file aaatest.s, line 13.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/aaatest Breakpoint 1, _start () at aaatest.s:13
13 xor %edi, %edi
(gdb) n
14 movl $5, %ecx
(gdb) n
15 clc
(gdb) n···
(gdb) n
19 aaa (第三轮循环)
(gdb) info reg
eax 0xa 10
(gdb) n
20 movb %al, sum(, %edi, 1)
(gdb) info reg
eax 0x100 256
(gdb) n
21 inc %edi
(gdb) n···
(gdb) n
23 adcb $0, sum(, %edi, 4)
(gdb) n
24 movl $1, %eax
(gdb) x/6b &sum
0x804b00c <sum>: 0x08 0x05 0x00 0x01 0x08 0x00
(十六)dastest.s
命令行:
$ as --32 -gstabs -o dastest.o dastest.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o dastest -lc dastest.o
$ gdb -q dastest
输出结果:
Reading symbols from dastest...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file dastest.s, line 13.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter08/dastest Breakpoint 1, _start () at dastest.s:13
13 xor %edi, %edi
(gdb) n
14 movl $3, %ecx
(gdb) n
16 movb value2(, %edi, 1), %al
(gdb) n
17 sbbb value1(, %edi, 1), %al
(gdb) n
18 das
(gdb) info reg
eax 0xe 14
(gdb) n
19 movb %al, result(, %edi, 1)
(gdb) info reg
eax 0x8 8
(gdb) n···
(gdb) n
22 sbbb $0, result(, %edi, 4)
(gdb) n
23 movl $1, %eax
(gdb) x/4xb &result
0x804b008 <result>: 0x08 0x48 0x02 0x00
52933 - 28125 = 24808, 与结果相符。
(十七)cpuidtest.s
命令行:
$ as --32 -gstabs -o cpuidtest.o cpuidtest.s
zhaowx9@ubuntu:~/Desktop/chapter08$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cpuidtest -lc cpuidtest.o
zhaowx9@ubuntu:~/Desktop/chapter08$ ./cpuidtest
输出结果:
This processor supports the CPUID instruction
二. Sample programs in Chapter 10
(一)movstest1.s
命令行:
$ as --32 -gstabs -o movstest1.o movstest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o movstest1 -lc movstest1.o
$ gdb -q movstest1
输出结果:
Reading symbols from movstest1...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file movstest1.s, line 11.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/movstest1 Breakpoint 1, _start () at movstest1.s:11
11 leal value1, %esi
(gdb) n
12 leal output, %edi
(gdb) n
13 movsb
(gdb) n
14 movsw
(gdb) x/s &output
0x804b018 <output>: "T"
(gdb) n
15 movsl
(gdb) x/s &output
0x804b018 <output>: "Thi"
(gdb) n
17 movl $1, %eax
(gdb) x/s &output
0x804b018 <output>: "This is"
(二)movstest2.s
命令行:
$ as --32 -gstabs -o movstest2.o movstest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o movstest2 -lc movstest2.o
$ gdb -q movstest2
输出结果:
Reading symbols from movstest2...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file movstest2.s, line 11.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/movstest2 Breakpoint 1, _start () at movstest2.s:11
11 leal value1+22, %esi
(gdb) n
12 leal output+22, %edi
(gdb) n
14 std
(gdb) n
15 movsb
(gdb) n
16 movsw
(gdb) x/s &output
0x804b018 <output>: ""
(gdb) n
17 movsl
(gdb) x/s &output
0x804b018 <output>: ""
(gdb) n
19 movl $1, %eax
(gdb) x/s &output
0x804b018 <output>: ""
(gdb) x/23xb &output
0x804b018 <output>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x804b020 <output+8>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x804b028 <output+16>: 0x00 0x00 0x00 0x6e 0x67 0x2e 0x0a
(三)movstest3.s
命令行:
$ as --32 -gstabs -o movstest3.o movstest3.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o movstest3 -lc movstest3.o
$ gdb -q movstest3
输出结果:
Reading symbols from movstest3...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file movstest3.s, line 11.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/movstest3 Breakpoint 1, _start () at movstest3.s:11
11 leal value1, %esi
(gdb) n···
(gdb) x/23xb &output
0x804b018 <output>: 0x54 0x68 0x69 0x73 0x20 0x69 0x73 0x20
0x804b020 <output+8>: 0x61 0x20 0x74 0x65 0x73 0x74 0x20 0x73
0x804b028 <output+16>: 0x74 0x72 0x69 0x6e 0x67 0x2e 0x0a
(四)reptest1.s
命令行:
$ as --32 -gstabs -o reptest1.o reptest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o reptest1 -lc reptest1.o
$ gdb -q reptest1
输出结果:
Reading symbols from reptest1...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file reptest1.s, line 11.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/reptest1 Breakpoint 1, _start () at reptest1.s:11
11 leal value1, %esi
(gdb) n
12 leal output, %edi
(gdb) n
13 movl $23, %ecx
(gdb) n
14 cld
(gdb) n
15 rep movsb
(gdb) n
17 movl $1, %eax
(gdb) x/23xb &output
0x804b018 <output>: 0x54 0x68 0x69 0x73 0x20 0x69 0x73 0x20
0x804b020 <output+8>: 0x61 0x20 0x74 0x65 0x73 0x74 0x20 0x73
0x804b028 <output+16>: 0x74 0x72 0x69 0x6e 0x67 0x2e 0x0a
(gdb) x/s &output
0x804b018 <output>: "This is a test string.\n"
(五)reptest2.s
命令行:
$ as --32 -gstabs -o reptest2.o reptest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o reptest2 -lc reptest2.o
$ gdb -q reptest2
输出结果:
Reading symbols from reptest2...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file reptest2.s, line 13.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/reptest2 Breakpoint 1, _start () at reptest2.s:13
13 leal value1, %esi
(gdb) n
14 leal output, %edi
(gdb) n
15 movl $6, %ecx
(gdb) n
16 cld
(gdb) n
17 rep movsl
(gdb) n
19 movl $1, %eax
(gdb) x/s &output
0x804b020 <output>: "This is a test string.\nO"
(六)reptest3.s
命令行:
$ as --32 -gstabs -o reptest3.o reptest3.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o reptest3 -lc reptest3.o
$ gdb -q reptest3
输出结果:
Reading symbols from reptest3...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file reptest3.s, line 15.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/reptest3 Breakpoint 1, _start () at reptest3.s:15
15 leal string1, %esi
(gdb) n
16 leal buffer, %edi
(gdb) n
17 movl length, %ecx
(gdb) n
18 shrl $2, %ecx
(gdb) n
19 cld
(gdb) n
20 rep movsl
(gdb) n
21 movl length, %ecx
(gdb) x/s &buffer
0x804b038 <buffer>: "This is a test of the conversion program"
(gdb) n
22 andl $3, %ecx
(gdb) n
23 rep movsb
(gdb) print $ecx
$1 = 3
(gdb) n
25 movl $1, %eax
(gdb) x/s &buffer
0x804b038 <buffer>: "This is a test of the conversion program!\n"
(七)reptest4.s
命令行:
$ as --32 -gstabs -o reptest4.o reptest4.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o reptest4 -lc reptest4.o
$ gdb -q reptest4
输出结果:
Reading symbols from reptest4...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file reptest4.s, line 11.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/reptest4 Breakpoint 1, _start () at reptest4.s:11
11 leal value1+22, %esi
(gdb) n
12 leal output+22, %edi
(gdb) n
13 movl $23, %ecx
(gdb) n
14 std
(gdb) n
15 rep movsb
(gdb) n
17 movl $1, %eax
(gdb) x/s &output
0x804b018 <output>: "This is a test string.\n"
(八)stostest1.s
命令行:
$ as --32 -gstabs -o stostest1.o stostest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o stostest1 -lc stostest1.o
$ gdb -q stostest1
输出结果:
Reading symbols from stostest1...
(gdb) break *_start+1
Breakpoint 1 at 0x8049001: file stostest1.s, line 11.
(gdb) run
Starting program: /home/zhaowx9/Desktop/chapter10/stostest1 Breakpoint 1, _start () at stostest1.s:11
11 leal space, %esi
(gdb) n
12 leal buffer, %edi
(gdb) n
13 movl $256, %ecx
(gdb) n
14 cld
(gdb) n
15 lodsb
(gdb) n
16 rep stosb
(gdb) print/x $eax
$1 = 0x20
(gdb) x/12xb &buffer
0x804b008 <buffer>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x804b010 <buffer+8>: 0x00 0x00 0x00 0x00
(gdb) n
18 movl $1, %eax
(gdb) x/12xb &buffer
0x804b008 <buffer>: 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20
0x804b010 <buffer+8>: 0x20 0x20 0x20 0x20
(九)convert.s
命令行:
$ as --32 -gstabs -o convert.o convert.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o convert -lc convert.o
$ ./convert
输出结果:
THIS IS A TEST, OF THE CONVERSION PROGRAM!
(十)cmpstest1.s
1. 原:
命令行:
$ as --32 -gstabs -o cmpstest1.o cmpstest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cmpstest1 -lc cmpstest1.o
$ ./cmpstest1
$ echo $?
输出结果:
0
2. 改:
将 value1 的值改为 test
后再进行实验:
命令行:
$ as --32 -gstabs -o cmpstest1.o cmpstest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cmpstest1 -lc cmpstest1.o
$ ./cmpstest1
$ echo $?
输出结果:
1
(十一)cmpstest2.s
1. 原:
命令行:
$ as --32 -gstabs -o cmpstest2.o cmpstest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cmpstest2 -lc cmpstest2.o
$ ./cmpstest2
$ echo $?
输出结果:
11
2. 改:
将 value2 的值改为 This is a test of the CMPS instructions
后再进行实验:
命令行:
$ as --32 -gstabs -o cmpstest2.o cmpstest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cmpstest2 -lc cmpstest2.o
$ ./cmpstest2
$ echo $?
输出结果:
0
(十二)strcomp.s
命令行:
$ as --32 -gstabs -o strcomp.o strcomp.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o strcomp -lc strcomp.o
$ ./strcomp
$ echo $?
输出结果:
255
问题: 对 cmp
的理解出现错误,导致一直无法看懂该程序。
解决方法: 通过反复阅读该程序以及上网搜索,终于理解正确了 cmp
的用法,即如下
cmp a, b
ja xxx
/*
若 a > b, 则跳转
否则, 不跳转
*/
对不同实例的测试也证明了该理解是正确的。
(十三)scastest1.s
命令行:
$ as --32 -gstabs -o scastest1.o scastest1.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o scastest1 -lc scastest1.o
$ ./scastest1
$ echo $?
输出结果:
16
(十四)scastest2.s
命令行:
$ as --32 -gstabs -o scastest2.o scastest2.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o scastest2 -lc scastest2.o
$ ./scastest2
$ echo $?
输出结果:
0
(十五)strsize.s
命令行:
$ as --32 -gstabs -o strsize.o strsize.s
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o strsize -lc strsize.o
$ ./strsize
$ echo $?
输出结果:
35
实验心得
掌握了许多新的汇编指令及其用法,包括加法、减法、乘法、除法、移位、调整格式、字符串各种操作等,同时也对在Ubuntu上进行汇编程序的编译连接以及调试的使用更加熟练,对各种调试指令查漏补缺,有了更进一步的理解。在对汇编程序的阅读理解和验证的过程中,更进一步地理解了汇编程序的结构和书写过程。
assembly8_10相关推荐
最新文章
- jmeter内存溢出处理方式记录
- MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数
- 解决plt.savefig存的图是空白的
- cad记忆口诀_CAD制图口诀你值得拥有!
- eclipse取消空格补全
- 了解恶意软件和插件!
- 永不示弱_永不过时的网页设计:今天和2000年的在线投资组合
- CSS/DIV网页设计视频教程目录【转】
- NeHe OpenGL教程 第三十七课:卡通映射
- “我今年 31 岁,工作 7 年,明年退休...”
- c语言字符串定界符,关于c ++:按字符分割字符串
- 解决IE9,hack 设置背景图无效
- C++基础--static的用法
- 网络七层模型及各层协议
- 魔数湖南大学程序设计作业
- 一键将kafka,zookeeper安装为windows服务
- js 七大继承--史上最全最易懂
- 一个按钮控制灯的开关
- 华为代理服务器相关配置
- DTLN网络模型学习