检测点6·1
(1)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:
assume cs:coesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:mov ax,[bx]
mov cs:[bx],ax
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
(2)(1)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行,栈空间设置在程序内,完成程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0 ;5个字单元用作栈空间
start:
mov ax,cs
mov ss,ax
mov sp,1ah
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:push [bx]
pop cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
实验5 编写、调试具有多个段的程序
这一章的内容较少,有些知识需要在实践中掌握。这个实验,即是实验,也是学习内
容。必须完成这个实验,才能继续向下学习。
(1)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stack
data segment
dw 0123H,0456H,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
-r
AX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA5 CS=0BA7 IP=0000 NV UP EI PL NZ NA PO NC
0BA7:0000 B8A60B MOV AX,0BA6
-t
AX=0BA6 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA5 CS=0BA7 IP=0003 NV UP EI PL NZ NA PO NC
0BA7:0003 8ED0 MOV SS,AX
-t
DS=0B95 ES=0B95 SS=0BA5 CS=0BA7 IP=0000 NV UP EI PL NZ NA PO NC
0BA7:0000 B8A60B MOV AX,0BA6
-t
AX=0BA6 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA5 CS=0BA7 IP=0003 NV UP EI PL NZ NA PO NC
0BA7:0003 8ED0 MOV SS,AX
-t
AX=0BA6 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA6 CS=0BA7 IP=0008 NV UP EI PL NZ NA PO NC
0BA7:0008 B8A50B MOV AX,0BA5
-t
AX=0BA5 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA6 CS=0BA7 IP=000B NV UP EI PL NZ NA PO NC
0BA7:000B 8ED8 MOV DS,AX
-t
AX=0BA5 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0BA5 ES=0B95 SS=0BA6 CS=0BA7 IP=000D NV UP EI PL NZ NA PO NC
0BA7:000D FF360000 PUSH [0000] DS:0000=0123
-d0ba5:0 f
0BA5:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09 #.V.............
-
①CPU执行程序,程序返回前,data段中是数据为多少?、
23h,01h,56h,04h,89h,07h,BCh,0Ah,EFh,0Dh,EDh,0Fh,BAh,0Ch,87h,09h
共16字节。
②CPU执行程序,程序返回前,cs=0ba7h,ss=0ba6h,ds=0ba5h
③设程序加载后,code段的段地址为 x,则data段的段地址为x-2,stack段的段地址为x-1。
(2)将下面的程序编译连接,用 debug加载、跟踪,然后回答问题:
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
C:\DOCUME~1\ADMINI~1>debug c:\q.exe
-t
AX=0BA6 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA5 CS=0BA7 IP=0003 NV UP EI PL NZ NA PO NC
0BA7:0003 8ED0 MOV SS,AX
-t
AX=0BA6 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA6 CS=0BA7 IP=0008 NV UP EI PL NZ NA PO NC
0BA7:0008 B8A50B MOV AX,0BA5
-t
AX=0BA5 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA6 CS=0BA7 IP=000B NV UP EI PL NZ NA PO NC
0BA7:000B 8ED8 MOV DS,AX
-t
AX=0BA5 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0BA5 ES=0B95 SS=0BA6 CS=0BA7 IP=000D NV UP EI PL NZ NA PO NC
0BA7:000D FF360000 PUSH [0000] DS:0000=0123
-d 0ba5:0 f
0BA5:0000 23 01 56 04 00 00 00 00-00 00 00 00 00 00 00 00 #.V.............
-
①CPU执行程序,程序返回前,data段中的数据为多少?
23h,01h,56h,04h,0,0,0,0,0,0,0,0,0,0,0,0;共16字节。
②CPU执行程序,程序返回前,cs=0ba7h,ss=0ba6h,ds=0ba5h
③设程序加载后,code段的段地址为x,则data段的段地址为x-2,stack段地址为x-1 ④对于如下定义的段:
name segment
···
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为: .if (n%16)
N+{16-[N-(N/16)*16]}
.else n
(3)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stack
code segment
START:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
data segment
dw 0123H,0456H
data ends
stack segment
dw 0,0
stack ends
end START
C:\DOCUME~1\ADMINI~1>debug c:\q.exe
-t
AX=0BA9 BX=0000 CX=0044 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA5 CS=0BA5 IP=0003 NV UP EI PL NZ NA PO NC
0BA5:0003 8ED0 MOV SS,AX
-t
AX=0BA9 BX=0000 CX=0044 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA9 CS=0BA5 IP=0008 NV UP EI PL NZ NA PO NC
0BA5:0008 B8A80B MOV AX,0BA8
-t
AX=0BA8 BX=0000 CX=0044 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0B95 SS=0BA9 CS=0BA5 IP=000B NV UP EI PL NZ NA PO NC
0BA5:000B 8ED8 MOV DS,AX
-t
AX=0BA8 BX=0000 CX=0044 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0BA8 ES=0B95 SS=0BA9 CS=0BA5 IP=000D NV UP EI PL NZ NA PO NC
0BA5:000D FF360000 PUSH [0000] DS:0000=0123
-d 0ba8:0 f
0BA8:0000 23 01 56 04 00 00 00 00-00 00 00 00 00 00 00 00 #.V.............
-
①CPU执行程序,程序返回前,data段中的数据为多少?
23h,01h,56h,04h,0,0,0,0,0,0,0,0,0,0,0,0;共16字节。
②CPU执行程序,程序返回前,cs=0ba5h,ss=0ba9h,ds=0ba8h
③设程序加载后,code段的段地址为x,则data段的段地址为x+3,stack段地址为x+4 (4)如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说,
不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因。
只有第(3)题得到了正确执行,个人猜测,在不指明开始标号的情况下,编译器会把程序的第一条指令当做程序的开始(伪指令是由编译器执行的)。
(5)程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存
到C段中。
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
code segment
start:mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov ax,c
mob es,ax
xor bx,bx
mov cx,8
s:mov al,ds:[bx]
add al,ss:[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
(6)程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆
序存储到b段中。
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h
mov cx,8
xor bx,bx
s:push [bx]
inc bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
- [kanwangxue] 感觉楼主很乖的。有点孩子气。呵呵。 01/27 08:58
- [kanwangxue] it界,进去干嘛啊,到时候自己牛比了,首先写一个自己的语言,自己用。进入IT界不就是随波做流吗/?他 01/27 08:57
- [kanwangxue] 哥们,不要为了赚钱而学计算机。 计算机是年轻时候干的, 30岁后可以开始想赚钱,年轻嘛,不要这么悲 01/27 08:50
- [游客] 怎么说? 01/26 16:22
- [游客] 你这不行啊,差远了! 01/10 22:29
- [chinatree] 谢谢你。相信你也会成功的。 01/09 14:22
- [landyking] 哥们儿,好久不见。相信你会成功的。 12/02 23:34
- [chinatree] 哇哇,被挖坟了。莫生气,只是感觉谦虚些好,就算你的程序真的是史上最强的,也别说出来嘛,自己偷着乐就行 11/20 00:41
- [xiaoyao2012] 你的程序和我的程序比较也不见得你的程序又节约空间,在某种意义上说你的程序用了没学的指令,所以不见得你 11/19 15:39
- [heliang6291] 一起加油啊 07/02 02:45
- [游客] 急需一个汇编程序大作业。。。。。。。。。。。。。。。。。。。??? 12/28 16:50
- [游客] 这么多人喜欢你,我嫉妒了。但你不可以喜欢那么多,允许你在我不需要你的时候帮别人。如果我需要立叫立到。 11/13 13:11
- [tily] 兄弟 我来看你啦 呵呵 最近可好呀 09/26 22:17
- [stqcw] 能加我qq吗?1270911891 我在做课程设计2的时候 遇到点问题 09/24 09:16
- [stqcw] 能加我qq吗?1270911891 我的环境还是有点问题。按下A的时候不能显示满屏的A 09/20 09:36
- [stqcw] 牛人 我在xp里面运行王爽 汇编第二版 p280的例子 按下esc键没反应 呀 怎样在虚拟机里配置一 09/17 15:18
- [landyking] 呵呵,交个朋友,共同学习. 09/08 00:03
- [luyingdzx] 能知道你的QQ吗?或者请加一下我的QQ271190440,可以吗 虽然在论坛能获得解答,但是有的问 08/07 21:32