汇编语言题目答案4.docx

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

汇编语言题目答案4.docx

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

汇编语言题目答案4.docx

汇编语言题目答案4

第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.说明子程序参数传递的三种主要方法。

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

四、程序阅读题

1.dal数据区中有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开始的字节存储单元内容依次是1、0、3、2、5、4、7、6、9、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;然后跳出循环体

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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