汇编语言王爽检测点答案
第一章.检测点
(1) 13
(2) 1024,0,1023
(3) 8192,1024
(4) 2^30,2^20,2^10
(5) 64,1,16,4
(6) 1,1,2,2,4
(7) 512,256
(8) 二进制
注:符号'^'指求幂运算(如: 2^30指2的30次方)
第二章
检测点
(1)大家做这题的时候一定要注意,要看清楚数制,比如是二进制还是十进制,还是十六进,我当时没注意,做错了!!呵呵!!
第一空:F4A3H
第二空:31A3H
第三空:3123H
第四空:6246H
第五空:826CH
第六空:6246H
第七空:826CH
第八空:04D8H
第九空:0482H
第十空:6C82H
第十一空:D882H
第十二空:D888H
第十三空:D810H
第十四空:6246H
(2)
mov ax,2
add ax,ax
add ax,ax
add ax,ax
检测点
(1)00010H 1000fH
(2)0001H 2000H
检测点
共修改了4次ip 第一次mov ax,bx 第二次是sub ax,ax 第三次是jmp ax 第四次是执行 jmp ax 最后ip的值是0 因为ax的值是零!!
检测点
(1)
第一空:2662H
第二空:E626H
第三空:E626H
第四空:2662H
第五空:D6E6H
第六空:FD48H
第七空:2C14H
第八空:0000H
第九空:00E6H
第十空:0000H
第十一空:0026H
第十二空:000CH
注意:ax中存取的是字型数据,高地址存放高字节,低地址存放低字节!!(一定要小心)
①写出cpu的执行序列Mov ax,6622
Jmp 0ff0:0100
Mov ax,2000H
Mov ds,ax
Mov ax ,[0008]
Mov ax,[0002]
②
指令执行顺序
寄存器
CS
IP
DS
AX
BX
初值
2000H
0000
1000H
mov ax,6622h
2000H
0003
1000H
6622H
0000
jmp 0ff0:0100
1000h
0000
1000H
0000
mov ax,2000h
1000H
0003
1000H
2000H
0000
mov ds,ax
1000H
0005
2000H
2000H
0000
mov ax,[0008]
1000H
0008
2000H
C389H
0000
mov ax,[0002]
1000H
000B
2000H
EA66H
0000
③数据和程序在计算机中都是以二进制的形式存放的,在区别程序和数据时,关键是看段地址,如果段地址是ds段,说明该内存中存放的是数据,如果段地址是cs段,说明该内存中存放的是程序指令
检测点
(1)
Mov ax,2000H
Mov ss,ax
Mov sp,0010H
(2)
Mov ax,1000H
Mov ss,ax
Mov sp,0000H
注意:出栈时和入栈时的顺序,空栈时栈顶指向的是最高端地址!栈满是栈顶指针指向的是最底端地址!!
2。实验任务
(1)
5BEA
5CCA
30F0
6023
00FE 2200:0100 5CCA
00FC 2200:00FE 6023
00FE 6023
0100 5CCA
00FE 2200:0100 30F0
00FC 22000:00FC 2E39
(2)
因为在DEBUG 中T命令在执行修改寄存器ss的指令时,会产生中断,将现场保护起来,下一条指令也紧接着被执行!!
实验三:
该实验自己做吧我做出来的东西只是我pc上的数据,可能在别的pc做出来的结果会不一样,在加之数据太多,我做了两次数据都没有完整的记下来,只好作罢!!
实验四: [bx]和loop的使用
(1)
assume cs:code
code segment
mov ax,0
mov ds,ax
mov cx,64
mov bx,200h
s:
mov ds:[bx],ax
inc bx
inc ax
loop s
mov ax,4c00H
int 21h
code ends
End
(2)如上题我一不小心写出来就是九条指令了!!!呵呵!!
(3)具体做法是将那段指令写道内存中,察看其在内存中的起始地址和终止地址,然后将该内存的内容复制到0:200处就可以了!!
检测点
(1)
Mov cs:[dx],ax
(2)
第一空:cs
第二空:26或者1ah
第三空:pop cs:[dx]
发表于 @ 2008年08月19日01:11:00 | 评论( 2 ) | 编辑| 举报| 收藏
旧一篇:常用命令(转) | 新一篇:实验五: 编写、调试具有多个段的程序
Copyright ? maokaijiang
Powered by CSDN Blog
十一川藏疯狂之旅
本文来自CSDN博客,转载请标明出处:王爽汇编语言答案(本答案是自己做的所有题目已在deubg中调试;但难免有差错,发现的提醒我谢谢)
(1)
① 1931(一直保持不变,由于pc不同答案有可能不一样)
②cs=1943 ss=1941 ds=1931 (由于pc不同,所以答案也可能不同,这只是机子上的数据)
③第一空:X—2
第二空:X—1
(2)
1.一直不变
2.答案不一样,就不写了
,X-1
4.(N/16+1)*16
(3)
1.一直不变
2.答案不一样
+3,X+4
(4)
答:可能执行,如果不指明标号,cpu顺序执行指令,所有可能正确执行!!!!
(5)
;******************************************
;将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
d segment
db 8 dup(0)
d ends
;********************************* ;代码段
;********************************* code segment
start:
mov ax,d
mov es,ax
mov ax,a
mov ds,ax
mov cx,8
mov ax,0
mov bx,0
again1:
mov dx,ds:[bx]
mov es:[ax],dx
inc bx
inc ax
loop again1
mov ax,b
mov ds,ax
mov ax,0
mov bx,0
mov cx,8
mov dx,0
again2:
add dx,ds:[bx]
mov es:[ax],dx
inc ax
inc bx
loop again2
mov ax,4c00h
int 21h
code ends
end start
(6)
;*****************************************************
;编写程序,用push指令将a段中的word数据,逆序存储到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,b
mov ss,ax
mov sp,10h
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
本文来自CSDN博客,转载请标明出处:ht(1)
本题略!!!
(2)
;***************************************************** ;编程,将datasg 段中的每个单词的前四个字母改写为大写字母;****************************************************** assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. displsy '
db '2. brows '
db '3. replace '
db '4. modify '
datasg segment
codesg segment start:
mov ax,stacksg mov ss,ax
mov sp,16
mov ax,datasg mov ds,ax
mov dx,0
mov cx,4
s0:
push cx
mov si,0
mov cx,4
s1:
mov al,[bx+si+4] add al,B
mov [bx+si+4],al inc si
loop s1
add dx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
本文来自CSDN博客,转载请标明出处: cs:codesg,ds:data,es:table
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;以上是表示21年的21个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示21年公司总收的21个dword型数据
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,45257,17800
;以上是表示21年公司雇员人数的21个word型数据data ends
table segment
db 21 dup('year summ ne ?? ')
table ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov cx,21
mov bx,0
mov si,0
mov di,0
s0:
;**************************************
;把年份送到table中
;**************************************
mov al,[bx]
mov es:[di],al
mov al,[bx+1]
mov es:[di+1],al
mov al,[bx+2]
mov es:[di+2],al
mov al,[bx+3]
mov es:[di+3],al
;******************************************** ;把收入送到table中
;******************************************** mov ax,54h[bx]
mov dx,56h[bx]
mov es:5h[di],ax
mov es:7h[di],dx
;**************************************
;把人数送到table中
;**************************************
mov ax,0A8h[si]
mov es:0Ah[di],ax
;**************************************
;计算人均收入并把其送到table中
;*****************************************
mov ax,54h[bx]
div word ptr 0A8h[si]
mov es:0Ch[di],ax
add si,2
add di,16
add dx,4
loop s0 ;循环21次
mov ax,4c00h
int 21h
codesg ends
end start
本文来自CSDN博客,转载请标明出处:第九章收藏检测点
(1)程序如下:
assume cs:code
data segment
db 0,0,0,0,0,0,0,0
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
jmp word ptr [bx+1]
mov ax,4c00h
int 21h
code ends
ends start
理由是:要是jmp跳转后执行第一条指令,本条指令是word ptr是段内转移必须满足ip=0 所以ds:[bx+1]的值必须为零,也就是data段的第二个数据必须为零
(2)第一空:bx
第二空:cs
(3) 本题可以先用debug将内存2000:1000中的内容写为BE 00 06 00 .....然后再调试可得到
cs=0006h ip=00BEh
检测点
;***************************************** ;实现在内存2000H段中查找第一个值为零的字节, ;找到后,将它的偏移地址存储到dx中
;****************************************** assume cs:code
code segment
start:
mov ax,2000H
mov ds,ax
mov bx,0
s:
mov cl,[bx]
mov ch,0
jcxz ok
inc bx
jmp short s
ok:
mov dx,bx
mov ax,4c00h
int 21h
code ends
end start
注:利用jcxz判断cx是否等于零来发生跳转,注意判断的是一个字节!!
检测点
;************************************************************
;利用loop指令,实现在内存2000H段中查找第一个值为零的byte,找到后;将它的偏移地址存储到dx中
;************************************************************* assume cs:code
code segment
start:
mov ax,2000H
mov ds,ax
mov bx,0
s:
mov cl,[bx]
mov ch,0