汇编语言王爽检测点答案.docx

上传人:b****3 文档编号:5435743 上传时间:2023-05-08 格式:DOCX 页数:49 大小:25.58KB
下载 相关 举报
汇编语言王爽检测点答案.docx_第1页
第1页 / 共49页
汇编语言王爽检测点答案.docx_第2页
第2页 / 共49页
汇编语言王爽检测点答案.docx_第3页
第3页 / 共49页
汇编语言王爽检测点答案.docx_第4页
第4页 / 共49页
汇编语言王爽检测点答案.docx_第5页
第5页 / 共49页
汇编语言王爽检测点答案.docx_第6页
第6页 / 共49页
汇编语言王爽检测点答案.docx_第7页
第7页 / 共49页
汇编语言王爽检测点答案.docx_第8页
第8页 / 共49页
汇编语言王爽检测点答案.docx_第9页
第9页 / 共49页
汇编语言王爽检测点答案.docx_第10页
第10页 / 共49页
汇编语言王爽检测点答案.docx_第11页
第11页 / 共49页
汇编语言王爽检测点答案.docx_第12页
第12页 / 共49页
汇编语言王爽检测点答案.docx_第13页
第13页 / 共49页
汇编语言王爽检测点答案.docx_第14页
第14页 / 共49页
汇编语言王爽检测点答案.docx_第15页
第15页 / 共49页
汇编语言王爽检测点答案.docx_第16页
第16页 / 共49页
汇编语言王爽检测点答案.docx_第17页
第17页 / 共49页
汇编语言王爽检测点答案.docx_第18页
第18页 / 共49页
汇编语言王爽检测点答案.docx_第19页
第19页 / 共49页
汇编语言王爽检测点答案.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言王爽检测点答案.docx

《汇编语言王爽检测点答案.docx》由会员分享,可在线阅读,更多相关《汇编语言王爽检测点答案.docx(49页珍藏版)》请在冰点文库上搜索。

汇编语言王爽检测点答案.docx

汇编语言王爽检测点答案

汇编语言王爽.检测点答案

第一章.检测点1.1

(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次方)

第二章

检测点2.1

(1)大家做这题的时候一定要注意,要看清楚数制,比如是二进制还是十进制,还是十六进,我当时没注意,做错了!

!

呵呵!

!

第一空:

F4A3H

第二空:

31A3H

第三空:

3123H

第四空:

6246H

第五空:

826CH

第六空:

6246H

第七空:

826CH

第八空:

04D8H

第九空:

0482H

第十空:

6C82H

第十一空:

D882H

第十二空:

D888H

第十三空:

D810H

第十四空:

6246H

(2)

movax,2

addax,ax

addax,ax

addax,ax

检测点2.2

(1)00010H1000fH

(2)0001H2000H

检测点2.3

共修改了4次ip第一次movax,bx第二次是subax,ax第三次是jmpax第四次是执行jmpax最后ip的值是0因为ax的值是零!

检测点3.1

(1)

第一空:

2662H

第二空:

E626H

第三空:

E626H

第四空:

2662H

第五空:

D6E6H

第六空:

FD48H

第七空:

2C14H

第八空:

0000H

第九空:

00E6H

第十空:

0000H

第十一空:

0026H

第十二空:

000CH

注意:

ax中存取的是字型数据,高地址存放高字节,低地址存放低字节!

(一定要小心)

(2)

①写出cpu的执行序列

Movax,6622

Jmp0ff0:

0100

Movax,2000H

Movds,ax

Movax,[0008]

Movax,[0002]

指令执行顺序

寄存器

CS

IP

DS

AX

BX

初值

2000H

0000

1000H

0

0

movax,6622h

2000H

0003

1000H

6622H

0000

jmp0ff0:

0100

1000h

0000

1000H

6622H

0000

movax,2000h

1000H

0003

1000H

2000H

0000

movds,ax

1000H

0005

2000H

2000H

0000

movax,[0008]

1000H

0008

2000H

C389H

0000

movax,[0002]

1000H

000B

2000H

EA66H

0000

③数据和程序在计算机中都是以二进制的形式存放的,在区别程序和数据时,关键是看段地址,如果段地址是ds段,说明该内存中存放的是数据,如果段地址是cs段,说明该内存中存放的是程序指令

检测点3.2

(1)

Movax,2000H

Movss,ax

Movsp,0010H

(2)

Movax,1000H

Movss,ax

Movsp,0000H

注意:

出栈时和入栈时的顺序,空栈时栈顶指向的是最高端地址!

栈满是栈顶指针指向的是最底端地址!

2。

实验任务

(1)

5BEA

5CCA

30F0

6023

00FE2200:

01005CCA

00FC2200:

00FE6023

00FE6023

01005CCA

00FE2200:

010030F0

00FC22000:

00FC2E39

(2)

因为在DEBUG中T命令在执行修改寄存器ss的指令时,会产生中断,将现场保护起来,下一条指令也紧接着被执行!

实验三:

该实验自己做吧我做出来的东西只是我pc上的数据,可能在别的pc做出来的结果会不一样,在加之数据太多,我做了两次数据都没有完整的记下来,只好作罢!

实验四:

[bx]和loop的使用

(1)

assumecs:

code

codesegment

movax,0

movds,ax

movcx,64

movbx,200h

s:

movds:

[bx],ax

incbx

incax

loops

movax,4c00H

int21h

codeends

End

(2)如上题我一不小心写出来就是九条指令了!

呵呵!

(3)具体做法是将那段指令写道内存中,察看其在内存中的起始地址和终止地址,然后将该内存的内容复制到0:

200处就可以了!

检测点6.1

(1)

Movcs:

[dx],ax

(2)

第一空:

cs

第二空:

26或者1ah

第三空:

popcs:

[dx]

发表于@2008年08月19日 01:

11:

00|评论

(2)|编辑|举报|收藏

旧一篇:

常用命令(转)|新一篇:

实验五:

编写、调试具有多个段的程序

Copyright©maokaijiang

PoweredbyCSDNBlog

十一川藏疯狂之旅

本文来自CSDN博客,转载请标明出处:

王爽汇编语言答案(本答案是自己做的所有题目已在deubg中调试;但难免有差错,发现的提醒我email:

maokaijiang1211@谢谢)

(1)

①1931(一直保持不变,由于pc不同答案有可能不一样)

②cs=1943ss=1941ds=1931(由于pc不同,所以答案也可能不同,这只是机子上的数据)

③第一空:

X—2

第二空:

X—1

(2)

1.一直不变

2.答案不一样,就不写了

3.X-2,X-1

4.(N/16+1)*16

(3)

1.一直不变

2.答案不一样

3.X+3,X+4

(4)

答:

可能执行,如果不指明标号,cpu顺序执行指令,所有可能正确执行!

(5)

;******************************************

;将a段和b段指的数据依次相加,将结果保存到c段中

;*******************************************

assumecs:

code

asegment

db1,2,3,4,5,6,7,8

aends

bsegment

db1,2,3,4,5,6,7,8

bends

dsegment

db8dup(0)

dends

;*********************************

;代码段

;*********************************

codesegment

start:

movax,d

moves,ax

movax,a

movds,ax

movcx,8

movax,0

movbx,0

again1:

movdx,ds:

[bx]

moves:

[ax],dx

incbx

incax

loopagain1

movax,b

movds,ax

movax,0

movbx,0

movcx,8

movdx,0

again2:

adddx,ds:

[bx]

moves:

[ax],dx

incax

incbx

loopagain2

movax,4c00h

int21h

codeends

endstart

(6)

;*****************************************************

;编写程序,用push指令将a段中的word数据,逆序存储到b段中

;******************************************************

assumecs:

code

asegment

dw1,2,3,4,5,6,7,8

aends

bsegment

dw0,0,0,0,0,0,0,0

bends

codesegment

start:

movax,b

movss,ax

movsp,10h

movax,a

movds,ax

movbx,0

movcx,8

s:

push[bx]

addbx,2

loops

movax,4c00h

int21h

codeends

endstart

本文来自CSDN博客,转载请标明出处:

ht

(1)

本题略!

(2)

;*****************************************************

;编程,将datasg段中的每个单词的前四个字母改写为大写字母

;******************************************************

assumecs:

codesg,ss:

stacksg,ds:

datasg

stacksgsegment

dw0,0,0,0,0,0,0,0

stacksgends

datasgsegment

db'1.displsy'

db'2.brows'

db'3.replace'

db'4.modify'

datasgsegment

codesgsegment

start:

movax,stacksg

movss,ax

movsp,16

movax,datasg

movds,ax

movdx,0

movcx,4

s0:

pushcx

movsi,0

movcx,4

s1:

moval,[bx+si+4]

addal,11011111B

mov[bx+si+4],al

incsi

loops1

adddx,16

popcx

loops0

movax,4c00h

int21h

codesgends

endstart

本文来自CSDN博客,转载请标明出处:

assumecs:

codesg,ds:

data,es:

table

datasegment

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个字符串

dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

;以上是表示21年公司总收的21个dword型数据

dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw11542,14430,45257,17800

;以上是表示21年公司雇员人数的21个word型数据

dataends

tablesegment

db21dup('yearsummne?

?

')

tableends

codesgsegment

start:

movax,data

movds,ax

movax,table

moves,ax

movcx,21

movbx,0

movsi,0

movdi,0

s0:

;**************************************

;把年份送到table中

;**************************************

moval,[bx]

moves:

[di],al

moval,[bx+1]

moves:

[di+1],al

moval,[bx+2]

moves:

[di+2],al

moval,[bx+3]

moves:

[di+3],al

;********************************************

;把收入送到table中

;********************************************

movax,54h[bx]

movdx,56h[bx]

moves:

5h[di],ax

moves:

7h[di],dx

;**************************************

;把人数送到table中

;**************************************

movax,0A8h[si]

moves:

0Ah[di],ax

;**************************************

;计算人均收入并把其送到table中

;*****************************************

movax,54h[bx]

divwordptr0A8h[si]

moves:

0Ch[di],ax

addsi,2

adddi,16

adddx,4

loops0;循环21次

movax,4c00h

int21h

codesgends

endstart

本文来自CSDN博客,转载请标明出处:

第九章收藏

检测点9.1

(1)程序如下:

assumecs:

code

datasegment

db0,0,0,0,0,0,0,0

dataends

codesegment

start:

movax,data

movds,ax

movbx,0

jmpwordptr[bx+1]

movax,4c00h

int21h

codeends

endsstart

理由是:

要是jmp跳转后执行第一条指令,本条指令是wordptr是段内转移必须满足ip=0所以ds:

[bx+1]的值必须为零,也就是data段的第二个数据必须为零

(2)第一空:

bx

第二空:

cs

(3)本题可以先用debug将内存2000:

1000中的内容写为BE000600.....然后再调试可得到

cs=0006hip=00BEh

检测点9.2

;*****************************************

;实现在内存2000H段中查找第一个值为零的字节,

;找到后,将它的偏移地址存储到dx中

;******************************************

assumecs:

code

codesegment

start:

movax,2000H

movds,ax

movbx,0

s:

movcl,[bx]

movch,0

jcxzok

incbx

jmpshorts

ok:

movdx,bx

movax,4c00h

int21h

codeends

endstart

注:

利用jcxz判断cx是否等于零来发生跳转,注意判断的是一个字节!

检测点9.3

;************************************************************

;利用loop指令,实现在内存2000H段中查找第一个值为零的byte,找到后

;将它的偏移地址存储到dx中

;*************************************************************

assumecs:

code

codesegment

start:

movax,2000H

movds,ax

movbx,0

s:

movcl,[bx]

movch,0

jmpok

incbx

loops

ok:

decbx

movdx,bx

movax,4c00h

int21h

codeends

endstart

实验八:

assumecs:

codesg

codesgsegment

movax,4c00h

int21h

start:

movax,0

s:

nop

nop

movdi,offsets

movsi,offsets2

movax,cs:

[si]

movcs:

[di],ax

s0:

jmpshorts

s1:

movax,0

int21h

movax,0

s2:

jmpshorts1

nop

codesgends

endstart

注:

程序可以正常运行,本程序主要考察了转移指令的使用!

实验九:

;****************************************************************************

;编程:

在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串'welcometomasm!

'.

;实验原理见书中186页

;****************************************************************************

assumecs:

code,ds:

data,es:

display,ss:

stack

datasegment

db'welcometomasm!

'

db02H,24H,71H

dataends

stacksegment

db16dup(0)

stackends

displaysegment

db1024dup(0)

displayends

codesegment

start:

movax,data

movds,ax

movsi,0

movax,0b872H;定义12行中间的起始位置

moves,ax

movcx,3

movdi,0

;*****************************

;做三次外循环,每次显示一种颜色

;******************************

s0:

pushcx

pushax

movcx,16

movbx,0

;*********************************************

;做上六次内循环,将数据段定义的字符串写入内存中

;*********************************************

s:

moval,[bx]

moves:

[si],al

moval,[di+10h]

moves:

[si+1],al

addsi,2

incbx

loops

subsi,32;将si回到初始位置

addsi,160;换行

popax

popcx

incdi;改变颜色

loops0

movax,4c00h

int21h

codeends

endstart

本文来自CSDN博客,转载请标明出处:

第十章收藏

检测点10.1

第一空:

1000

第二空:

0000

检测点10.2

ax=6

注意:

执行calls是ip的值为6接着进栈,然后执行popax相当于把ip的值放到ax中!

检测点10.3

ax=1100H

注意:

执行callfarptrs后cs=1000ip=3(10H)接着进栈然后执行popax此时ax=3

==〉addax,ax此时ax=6(100H)==〉popbx此时bx=1000==〉addax,bx此时ax=1100H

检测点10.4

ax=000B具体我就不一一分析了,呵呵!

检测点10.5

(1)

ax=3

(1)ax=1bx=0

实验十:

编写子程序

(1)显示字符串

;*******************************************************************

;显示字符串的子程序(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79)

;(cl)=颜色,ds:

si指向字符串的首地址

;********************************************************************

assumecs:

code,ds:

data,es:

display,ss:

stack

datasegment

db'welcometomasm!

',0

dataends

stacksegment

db8dup(0)

stackends

displaysegment

db1024dup(0)

displayends

codesegment

start:

movdh,8

movdl,3

movcl,2

movax,data

movds,ax

movsi,0

callshow_str

movax,4c00h

int21h

;*****************************************

;显示字符

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2