汇编语言习题答案.docx

上传人:b****6 文档编号:6861094 上传时间:2023-01-11 格式:DOCX 页数:11 大小:19.35KB
下载 相关 举报
汇编语言习题答案.docx_第1页
第1页 / 共11页
汇编语言习题答案.docx_第2页
第2页 / 共11页
汇编语言习题答案.docx_第3页
第3页 / 共11页
汇编语言习题答案.docx_第4页
第4页 / 共11页
汇编语言习题答案.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

汇编语言习题答案.docx

《汇编语言习题答案.docx》由会员分享,可在线阅读,更多相关《汇编语言习题答案.docx(11页珍藏版)》请在冰豆网上搜索。

汇编语言习题答案.docx

汇编语言习题答案

第4章自测练习

一、选择题(四选一)

1.设计子程序应该采纳的一对伪指令是__C_________。

Asegment/endsBstart/endstart

Cproc/endpDmacro/endm

2.主程序将它的参数带给子程序,那个参数被称为A。

A入口参数B出口参数

C寄放器参数D存储器参数

3.对应主程序CALL指令挪用子程序,子程序终止通常采纳__D_______指令返回主程序。

AjmpBiretChltDret

4.下面程序段条件转移语句发生跳转的条件是AL=___D_____。

cmpal,0fbh

jnlnext

A80hB8fhC0f0hD0ffh

5.如下程序段中的“deccx”指令执行了_C________次。

movcx,4

jcxznext

again:

deccx

jnzagain

next:

...

A0B1C4D5

二、填空题

1.程序的大体结构有顺序、分支、循环和子程序四种。

2.子程序能够通过__寄放器_、存储单元、(地址表)、_堆栈_等传递参数。

3.循环结构的程序通常由初始部份、循环体和循环操纵三部份组成。

4.若是主程序挪用与它处在同一个代码段的子程序,这是段内挪用。

5.下面程序段完成将存储单元abcd1中一个紧缩型BCD码拆成两个非紧缩型BCD码,高位BCD码寄存在abcd3单元,低位BCD码寄存在abcd2单元,再别离转换为对应的ASCⅡ码。

请将程序补充完整:

moval,abcdl

movcl,4

shral,cl

Oral,30h

movabcd3,al

moval,abcdl

andal,0fh

orlal,30h

movabcd2,al

6.在下述程序段的每一空框内填入一个语句,以实现如下功能:

字节变量string中寄存着一个字符串,以0DH为终止标志,求串长度并送字变量count中。

leasi,string

moval,0dh

xorcx,cx

goon:

cmpal,[si]

jznext

inccx

_incsi_________

jmpgoon

next:

movcont,cx

7.下述程序段运行后,AL=__88h_______、CL=__80h____。

moval,38h

movbl,49h

callsub0

incal

deccl

sub0proc

addal,bl

movcl,al

daa

ret

sub0endp

daa:

加法的十进制调整指令

(AL)←把AL的和调整到紧缩的BCD格式

这条指令执行前必需执行ADD或ADC指令,加法指令必需把两个紧缩的BCD码相加,并把结果寄存在AL寄放器中。

本指令的调整方式:

假设AF标志(辅助进位位)为1,或AL寄放器的低4位是16进制的A~F,那么AL寄放器内容加06H,且将AF位置1。

假设CF标志为1,或AL寄放器的高4位是16进制的A~F,那么AL寄放器内容加60H,且将CF位置1。

DAA指令对OF标志无概念,但阻碍所有其他条件标志。

8.阅读如下子程序,说明它的功能:

sumaryproc

xorax,ax

xordx,dx;执行后,DX=0。

again:

addax,[bx]

adcdx,0;执行的操作是DX=DX+0+CF。

incbx

incbx

loopagain;发生转移的条件是:

cx≠0。

ret

sumaryendp

子程序的入口参数:

DS:

BX=_16数组首地址、CX=_数据个数。

子程序的出口参数:

AX=_求和结果低16位、DX=_求和结果高16位。

子程序功能为:

_将CX个16位无符号数求和。

三、问答题

1.什么是多重循环?

循环体中存在循环结构就形成多重循环。

2.于程序中什么缘故需要现场爱惜和恢复?

如何实现?

主程序和子程序可能都要利用某个现场数据,例如,寄放器内容。

若是子程序不进行爱惜,就会改变原先的内容,返回主程序后将使主程序产生错误的执行结果。

因此,通常子程序开始爱惜现场数据,返回之前恢恢复先的数据。

现场爱惜和恢复通常借用堆栈区实现,也能够采纳特定区的方式。

也确实是把现成数据暂存入堆栈区域或特定存储区实现爱惜。

实现恢复那么是从堆栈或存储区掏出被爱惜的数据。

3.试述进程概念的一样格式。

进程概念采纳proc和endp一对伪指令实现,有一个用户概念的进程名(subname),能够选择是近(near)挪用仍是远(far)挪用。

这对伪指令中间是进程体,有任意合法的汇编语言语句组成,如下所示:

subnameproc[near/far];进程概念

.......;进程体

subnameendp;进程终止

4.什么是子程序嵌套和子程序递归?

子程序中又挪用子程序就形成子程序嵌套。

子程序中直接或间接挪用该子程序本身就形成子程序递归。

5.说明子程序参数传递的三种要紧方式。

寄放器、共享变量(公共存储单元)、堆栈

四、程序阅读题

数据区中有50个字节数据,下面程序段将每一个数据的低四位变反,高四位不变,并依次存人da2数据区中。

请将程序补充完整。

movcx,50

leasi,dal

leadi,da2

K1:

moval,[si]

xoral,0fh

mov[di],al

incsi

incdi

deccx

_____jnzk1_____________

2.下面是一个用地址表方式实现多分支的程序段。

它依照xyz单元中的数据,找到地址表中的对应地址实现转移,请将程序补充完整:

xyztbldwaddr0

dwaddrl

dwaddr2

dwaddr3

xyzdb2

leasi,xyztbl

movax,xyz

_addax,ax(或shlax,1)

addsi,ax

_movbx,[si]_

jmpbx

3.下述程序段运行后,nums开始的10个字节存储单元内容依次是什么?

numsdb0,1,2,3,4,5,6,7,8,9

leasi,nums

leadi,nums+l

movcx,5

again:

moval,[si]

xchgal,[di]

mov[si],al

addsi,2

adddi,2

loopagain

nums开始的字节存储单元内容依次是一、0、3、二、五、4、7、六、九、8。

本程序依次将两个数据彼此互换了一下位置。

4.下段程序的功能是什么?

程序执行后BL=_7____、DL=__9__、AX=___0__

将AX逐位左移,计算其中“1”和“0”的个数。

movax,4bd5h

movbl,0

movdl,bl

movcx,16

k1:

shlax,1

jck2

incbl

jmpk3

k2:

incdl

k3:

loopkl

5.如下源程序的功能是,从键盘读入一字符串(长度小于40),再将该串反转后,输出显示。

请在空格中添入正确的语句。

maxnoequ41

ssegsegmentstack

dw100dup(?

ssegends

dsegsegment

mesg1db'Inputastring:

$'

mesg2db'Itsreverseis:

$'

bufdbmaxno,?

maxnodup(?

dsegends

csegsegment

assumecs:

cseg,ds:

dseg,ss:

sseg

start:

_movax,dseg_;设置数据段ds地址

movds,ax

movdx,offsetmesg1

movah,9

int21h

movdx,offsetbuf

movah,0ah;利用DOS功能0AH从键盘输入一串字符

int21h

xorax,ax

_moval,buf+1___;取实际读人字符个数

1eadi,buf+2;第一个字符有效地址送DI

movsi,di

addsi,ax

movbyteptr[si],'$'

;字符串结尾填入“$”,以便用DOS功能挪用9号实现显示

decsi

cont:

cmpdi,si

_jaedone;当di≥si时终止___

;若是字符串长度是奇数,那么会显现si和di相等的情形

;若是字符串长度是偶数,那么会显现di大于si的情形

moval,[si]

xchgal,[di]

mov[si],al;前后两个字符彼此互换,实现反转

decsi

incdi;调整DI

jmpcont

done:

leadx,buf+2;反转后,字符串显示

movah,9;9号功能挪用需要“$”结尾字符串

int21h

movax,4c00h

int21h

csegends

endstart

五、程序设计题

1.从键盘同意一个小写字母,然后找出它的前导字符和后续字符,并按顺序输出这3个字符.

movah,1;输入一个小写字母

int21h

pushax;临时保留到堆栈

pushax;因显示功能挪用回破坏AX内容

movdl,al

decdl;输出前导字符

movah,2

int21h

popax;掏出输入的字符

movdl,al;输出该字符

movah,2

int21h

popax

movdl,al;输出后继字符

incdl

movah,2

int21h

(此题目也能够采纳一个循环程序段实现)

2.假设给字节变量char预留了26个单元的空间,试编写程序段,将字母A~Z依次寄存进去。

;数据段

chardb26dup(?

;代码段

moval,’a’

movbx,offsetchar

movcx,26

again:

mov[bx],al

incal

incbx

loopagain

提示:

还能够采纳串存储指令实现

3.编写计算100个16位正整数之和的程序。

若是和不超过16位字的范围(65535),那么保留其和到wordsum,如超过那么显示“overflow”。

;数据段

parraydw23,98,75……;假设有100个数据

wordsumdw0

msgdb‘overflow’,’$’

;代码段

movcx,100

movax,0

movbx,offsetparray

again:

addax,[bx]

jncnext

movdx,offsetmsg

movah,9

int21h;显示溢出信息

jmpdone;然后跳出循环体

next:

addbx,2

loopagain

movwordsum,ax

done:

4.编写一个完整的程序,要求如下:

①采纳简化段(或完整段)概念格式;

②提示输入字符串“Inputstring:

”;

③从键盘输入一个字符串(不超过255);

④别离统计其中的大写字母和小写字母的个数(采纳于程序形式);

⑤将大、小写字母个数别离寄存在ucase和lcase单元中。

stacksegmentstack;概念堆栈段

db1024dup(0)

stackends

datasegment;概念数据段

msgdb‘Inputstring:

’0dh,0ah,’$’

stringdb255

db?

db255dup(?

lcasedb0

ucasedb0

dataends

codesegment;概念代码段

assumecs:

code,ds:

data,ss:

stack

start:

movax,data;程序开始点

movds,ax

movah,9;提示输入字符串

movdx,offsetmsg

int21h

movah,0ah;从键盘同意字符串

movdx,offsetstring

int21h

movbx,offsetstring+2;设置入口参数

movcl,[bx-1];DS:

BX指向字符串首地址

xorch,ch;CX等于字符串长度

callslength;挪用子程序,统计大小写字母的个数

movlcase,al;处置出口参数:

AL=小写字母个数

movucase,ah;AH=大写字母个数

movax,4c00h

int21h;程序终止,返回DOS

;子程序:

采纳寄放器传递入口参数和出口参数

slengthproc

pushdx

xorax,ax

slen1:

movdl,[bx];掏出一个字符

cmpdl,’A’;判定是不是为大写字母

jbslen3;小于“A”,不是字母

cmpdl,’Z’

jaslen2;不是大写字母,可能是小写字母

incah;是大写字母,那么大写字母个数加1

jmpslen3

slen2:

cmpdl,’a’;判定是不是为小写字母

jbslen3

cmpdl,’z’

jaslen3

incal;是小写字母,那么小写字母个数加1

slen3:

incbx

loopslen1

popdx

ret

slengthendp

codeends

endstart

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

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1