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上进行汇编程序的编译连接以及调试的使用更加熟练,对各种调试指令查漏补缺,有了更进一步的理解。在对汇编程序的阅读理解和验证的过程中,更进一步地理解了汇编程序的结构和书写过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,maven-assembly-plugin可以用于构建项目时加载插件的问题。可以通过在项目的依赖中添加对应的maven-assembly-plugin依赖以更新依赖,并成功加载插件。具体的配置代码如下所示: ```xml <dependencies> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> </dependency> </dependencies> ``` 关于maven-assembly-plugin的使用,根据引用可以知道,它是一个基于Java的数据迁移工具,支持跨平台和跨数据库的特性。它可以通过NetBeans IDE运行/调试代码,也可以使用maven-assembly-plugin通过maven生成可执行的jar文件。 至于maven-assembly-plugin的jdk8版本,由于引用中没有提到具体版本信息,无法提供相关的信息。请您查阅相关文档或官方网站以获取准确的jdk8版本信息。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [maven踩坑:maven-assembly-plugin报红无法加载 报错:Plugin ‘maven-assembly-plugin:‘ not found](https://blog.csdn.net/qq_34321590/article/details/122066792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [smart-migrate:基于Java的数据迁移工具](https://download.csdn.net/download/weixin_42130889/18977686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值