汇编语言2005—2006学年第二学期期末考试复习题及参考答案
一、填空
1.十进制数369转换成二进制数为()2,转换成十六进制数为()16.
2.计算机中的指令由(操作码)和(地址码)两部分组成。
3.8086的地址总线有20根,寻址范围为(1M)字节。
4.下一条将要执行的指令的地址存放在寄存器()中。
5.写出IBMPC机的三种子程序返回的指令(RET),(IRET),(IRETD)。
6.汇编语言源程序需经过(汇编)程序汇编,(obj)程序连接才能生成可执行文件。
7.存储器某单元的地址表示为2314H:4132H,则它的偏移地址=(4132),物理地址=(2314h+4132h=6446h)
8.REP指令前缀与()指令配合使用。
9.在显示器上查看和修改内存单元的内容可以使用DEBUG的()和()命令。
10.(AL)=BFH,要求屏蔽第0,1两位,则要执行指令();如果要求第0,1位变反,可使用指令()
11.宏汇编适合于(),()的子功能段使用;
二、选择题
1.设字长N=16,有符号数7AE9H的补码表示为()
A.9EA7HB.76C4HC.8417HD.7AE9H
2.比较有符号数3260H与0B425H的大小关系为()
A.相等B.小于C.大于D.不能比较
3.指令JMPWORDPTR[BX][DI]中转移的目标地址为()
A.16dx(DS)+(BX)+(DI)B.16dx(ES)+(BX)+(DI)
C.16dx(SS)+(BX)+(DI)D.16dx(CS)+(BX)+(DI)
4.在指令MOVAX,[1000H]中,源操作数的寻址方式为()
A.立即寻址B.直接寻址C.段内间接寻址D.寄存器寻址
5.中断矢量表中存放的是()
A.中断类型号B.断点地址C.中断服务程序D.中断服务程序入口地址
6.8086的汇编语言指令系统中的条件转移指令可以使程序转移到()
A.段内的任何地方B.距该指令偏移地址为-32768~+32767的地方
C.距该指令偏移地址为-128~+127的地方.D.段外
7.能定义ASCII码字符串的数据定义语句有()
A.DB,DW,DD,DQ,DTB.DB,DW,DDC.DB,DWD.DB;
8.若(AL)=87H,执行ADDAL,0F5H后,S,Z,C,O,P的状态为()
A.SF=0,ZF=0,CF=1,OF=1,PF=0B.SF=1,ZF=0,CF=1,OF=0,PF=1
C.SF=0,ZF=0,CF=0,OF=1,PF=0D.SF=1,ZF=0,CF=1,OF=1,PF=1
9.比较指令CMP()
A.专用于有符号数比较B.专用于无符号数比较
C.专用于串比较D.不区分比较的对象是有符号数还是无符号数
10.数据传送指令对标志位的影响为()
A.都不影响;B.都影响;
C.除了SAHF,POPF,其它均不影响.D.除了控制标志位,其它均不影响
三、判断题
()31.段间调用的子程序必须由伪操作FAR说明为远过程。
()32.PC机以位作最小寻址单位。
()33.当SRC是立即数时,DST可以使用存储器寻址。
()34.指定各个逻辑段偏移地址可以使用ORG伪指令。
()35.LOOPE/LOOPZ是相等/为零时转移到标号,其退出条件是(CX)=0或ZF=0。
()36.POPIP
()37.设327FH和0BFFFH为有符号数的补码表示,则327FH
()38.多个模块间的符号交叉引用要用伪指令PUBLIC和EXTRN说明
()39.MOVAX,VAR1-VAR2+100
()40.ADD[SI],50
四、程序分析题
1.ADW1234H
BDW5678H
PUSHA
PUSHB
POPA
POPB
试回答:上述程序段执行后(A)=,(B)=
2.分析下面程序段,
MOVAL,200
SARAL,1
MOVBL,AL
MOVCL,2
SARAL,CL
ADDAL,BL
试问程序段执行后(BL)=(AL)=
3.STRINGDB‘ABCDEFGHIJ'
MOVAH,01;从键盘输入字符1~9
INT21H
ANDAL,0FH
DECAL
XORAH,AH
MOVBX,OFFSETSTRING
ADDBX,AX
MOVBL,[BX]
MOVAH,02H;显示输出
INT21H
试回答:
(1)上述程序段的功能是什么?
(2)如从键盘输入字符‘4',程序段有什么结果?
4.有如下程序:
ANDAL,AL
JZBRCH1
RCRAL,1
JZBRCH2
RCLAL,1
INCAL
JZBRCH3
上述程序运行后,试回答:
(1)当(AL)=时,程序转向BRCH1
(2)当(AL)=时,程序转向BRCH2
(3)当(AL)=时,程序转向BRCH3
5.下列程序段完成什么工作?
DAT1DB30DUP(?)
DAT2DB10DUP(?)
┇
MOVCX,10
MOVBX,20
MOVSI,0
MOVDI,0
NEXT:MOVAL,DAT1[BX][SI]
MOVDAT2[DI],AL
INCSI
INCDI
LOOPNEXT
6.下面程序段执行完以后,AL的内容是什么?
MOVBX,00FFH
ANDBX,0FFFH
ORBX,0F0FH
XORBX,00FFH
7.执行下列指令后,AX寄存器中的内容是什么?
STARTDW10H,20H,30H,40H,50H
EE1DW3
┇
MOVBX,OFFSETSTART
ADDBX,EE1
MOVAX,[BX]
8.试分析下面程序段的功能是什么?
CMPAL,‘A’
JCOTHER
CMPAL,‘Z’+1
JNCOTHER
JMPLETTER
┇
OTHER:┇
LETTER:┇
五、程序填空题
1.设AX,BX中的数一个为正数,一个为负数,下面程序段完成将正数送到PLW单元中存放,请将程序中所缺指令语句补上。
TESTAX,8000H
MOVPLW,BX
JMPDONE
K1:
DONE:
2.现有下列数据段:
DATASEGMENT
STR1DB‘ABCDEFGHIJKL'
COUNTEQU-STR1
BUFDBCOUNTDUP(0)
DATAENDS
下面程序段是实现把STR1中所有字符逆向传送到BUF缓冲区(即STR1中第一个字符送到BUF的最后一个单元,STR1中最后一字符送到BUF的第一个单元)。试把程序中所空缺的指令填上。
MOVSI,OFFSETBUF-1
MOVDI,OFFSETBUF
MOVCX,COUNT
____
LOOP:MOVSB
____
LOOPLOP
或者()
六、程序设计题
1.编程序段计算SUM=∑ai=a1+a2+...+a20,已知a1......a20依次存放在以BUF为首址i=1的数据区,每个数据占两个字节,和数SUM也为两个字节。(要求用循环结构编写,循环控制采用计数控制)。(此题勿需书写源程序格式,只需把试题要求的有关指令序列书写出来。)
2.设在DAT单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放了0~9的平方值,请用直接查表法编写一个子程序,在SQRTAB中查找出DAT单元中数据对应的平方值送SQR单元。并写出主程序的调用方式。
数据段如下:
DATASEGMENT
DATDBXXH
SQRTABDB0,1,4,9,...81
SQRDB?
DATAENDS
3.试编写出把DX、AX中的双字右移四位的程序段。
4.定义一个数据区,它包含有23H,24H,25H和26H四个字符数据,把这个数据区复制20次,并显示出复制结果。
汇编语言2005—2006学年第二学期期末考试复习题及参考答案
一、填空
1.十进制数369转换成二进制数为(101110001)2,转换成十六进制数为(171)16.
2.计算机中的指令由(操作码)和(地址码)两部分组成。
3.8086的地址总线有20根,寻址范围为(1M)字节。
4.下一条将要执行的指令的地址存放在寄存器(指令指针寄存器)中。
5.写出IBMPC机的三种子程序返回的指令(RET),(IRET),(IRETD)。
6.汇编语言源程序需经过(汇编)程序汇编,(连接)程序连接才能生成可执行文件。
7.存储器某单元的地址表示为2314H:4132H,则它的偏移地址=(4132),物理地址=(27272H)
8.REP指令前缀与(字符串)指令配合使用。
9.在显示器上查看和修改内存单元的内容可以使用DEBUG的(D)和(E)命令。
10.(AL)=BFH,要求屏蔽第0,1两位,则要执行指令(ANDAL,3F);如果要求第0,1位变反,可使用指令(XORAL,3F)
11.宏汇编适合于(程序短),(参数多)的子功能段使用;
二、选择题
1.设字长N=16,有符号数7AE9H的补码表示为(D)
A.9EA7HB.76C4HC.8417HD.7AE9H
2.比较有符号数3260H与0B425H的大小关系为(C)
A.相等B.小于C.大于D.不能比较
3.指令JMPWORDPTR[BX][DI]中转移的目标地址为(A)
A.16dx(DS)+(BX)+(DI)B.16dx(ES)+(BX)+(DI)
C.16dx(SS)+(BX)+(DI)D.16dx(CS)+(BX)+(DI)
4.在指令MOVAX,[1000H]中,源操作数的寻址方式为(B)
A.立即寻址B.直接寻址C.段内间接寻址D.寄存器寻址
5.中断矢量表中存放的是(D)
A.中断类型号B.断点地址C.中断服务程序D.中断服务程序入口地址
6.8086的汇编语言指令系统中的条件转移指令可以使程序转移到(A)
A.段内的任何地方B.距该指令偏移地址为-32768~+32767的地方
C.距该指令偏移地址为-128~+127的地方.D.段外
7.能定义ASCII码字符串的数据定义语句有(D)
A.DB,DW,DD,DQ,DTB.DB,DW,DDC.DB,DWD.DB;
8.若(AL)=87H,执行ADDAL,0F5H后,S,Z,C,O,P的状态为(C)
A.SF=0,ZF=0,CF=1,OF=1,PF=0B.SF=1,ZF=0,CF=1,OF=0,PF=1
C.SF=0,ZF=0,CF=0,OF=1,PF=0D.SF=1,ZF=0,CF=1,OF=1,PF=1
9.比较指令CMP(D)
A.专用于有符号数比较B.专用于无符号数比较
C.专用于串比较D.不区分比较的对象是有符号数还是无符号数
10.数据传送指令对标志位的影响为(D)
A.都不影响;B.都影响;
C.除了SAHF,POPF,其它均不影响.D.除了控制标志位,其它均不影响
三、判断题
()31.段间调用的子程序必须由伪操作FAR说明为远过程。T
()32.PC机以位作最小寻址单位。F
()33.当SRC是立即数时,DST可以使用存储器寻址。F
()34.指定各个逻辑段偏移地址可以使用ORG伪指令。T
()35.LOOPE/LOOPZ是相等/为零时转移到标号,其退出条件是(CX)=0或ZF=0。T
()36.POPIPF
()37.设327FH和0BFFFH为有符号数的补码表示,则327FH
()38.多个模块间的符号交叉引用要用伪指令PUBLIC和EXTRN说明T
()39.MOVAX,VAR1-VAR2+100F
()40.ADD[SI],50F
四、程序分析题
1.ADW1234H
BDW5678H
PUSHA
PUSHB
POPA
POPB
试回答:上述程序段执行后(A)=5678H,(B)=1234H
2.分析下面程序段,
MOVAL,200
SARAL,1
MOVBL,AL
MOVCL,2
SARAL,CL
ADDAL,BL
试问程序段执行后(BL)=0E4H(AL)=0DDH
3.STRINGDB‘ABCDEFGHIJ'
MOVAH,01;从键盘输入字符1~9
INT21H
ANDAL,0FH
DECAL
XORAH,AH
MOVBX,OFFSETSTRING
ADDBX,AX
MOVBL,[BX]
MOVAH,02H;显示输出
INT21H
试回答:
(1)上述程序段的功能是什么?根据从键盘输入的字符‘1’~‘9’,确定在显示器上显示STRING中第几个字符。
(2)如从键盘输入字符‘4',程序段有什么结果?显示器显示字符‘D’
4.有如下程序:
ANDAL,AL
JZBRCH1
RCRAL,1
JZBRCH2
RCLAL,1
INCAL
JZBRCH3
上述程序运行后,试回答:
(1)当(AL)=(AL)=0时,程序转向BRCH1
(2)当(AL)=(AL)=1时,程序转向BRCH2
(3)当(AL)=(AL)=-1时,程序转向BRCH3
5.下列程序段完成什么工作?把DAT1+20存储单元开始的10个字节搬到DAT2开始的连续10个存储单元中
DAT1DB30DUP(?)
DAT2DB10DUP(?)
┇
MOVCX,10
MOVBX,20
MOVSI,0
MOVDI,0
NEXT:MOVAL,DAT1[BX][SI]
MOVDAT2[DI],AL
INCSI
INCDI
LOOPNEXT
6.下面程序段执行完以后,AL的内容是什么?0F00H
MOVBX,00FFH
ANDBX,0FFFH
ORBX,0F0FH
XORBX,00FFH
7.执行下列指令后,AX寄存器中的内容是什么?3000H
STARTDW10H,20H,30H,40H,50H
EE1DW3
┇
MOVBX,OFFSETSTART
ADDBX,EE1
MOVAX,[BX]
8.试分析下面程序段的功能是什么?判断AL的内容,若为‘A’~‘Z’的大写字母时,程序转LETTER处理,否则转OTHER处理
CMPAL,‘A’
JCOTHER
CMPAL,‘Z’+1
JNCOTHER
JMPLETTER
┇
OTHER:┇
LETTER:┇
五、程序填空题
1.设AX,BX中的数一个为正数,一个为负数,下面程序段完成将正数送到PLW单元中存放,请将程序中所缺指令语句补上。
TESTAX,8000H
JEK1或JZK1
MOVPLW,BX
JMPDONE
K1:MOVPLW,AX
DONE:
2.现有下列数据段:
DATASEGMENT
STR1DB‘ABCDEFGHIJKL'
COUNTEQU-STR1
BUFDBCOUNTDUP(0)
DATAENDS
下面程序段是实现把STR1中所有字符逆向传送到BUF缓冲区(即STR1中第一个字符送到BUF的最后一个单元,STR1中最后一字符送到BUF的第一个单元)。试把程序中所空缺的指令填上。
MOVSI,OFFSETBUF-1
MOVDI,OFFSETBUF
MOVCX,COUNT
__CLD__
LOOP:MOVSB
__SUBSI,2__
LOOPLOP
或者(STD/ADDDI,2)
六、程序设计题
1.编程序段计算SUM=∑ai=a1+a2+...+a20,已知a1......a20依次存放在以BUF为首址i=1的数据区,每个数据占两个字节,和数SUM也为两个字节。(要求用循环结构编写,循环控制采用计数控制)。(此题勿需书写源程序格式,只需把试题要求的有关指令序列书写出来。)
程序段:MOVAX,0
MOVBX,OFFSETBUF
MOVCX,20
LOP:ADDAX,[BX]
INCBX
INCBX
LOOPLOP
MOVSUM,AX
2.设在DAT单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放了0~9的平方值,请用直接查表法编写一个子程序,在SQRTAB中查找出DAT单元中数据对应的平方值送SQR单元。并写出主程序的调用方式。
数据段如下:
DATASEGMENT
DATDBXXH
SQRTABDB0,1,4,9,...81
SQRDB?
DATAENDS
STACL1SEGMENTPARASTACK
DW20HDUP(?)
STACK1ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK1
START:MOVAX,DATA
MOVDS,AX
┇
CALLSUBROT
┇
MOVAH,4CH
INT21H
SUBROTPROC
PUSHAX
PUSHBX
LEABX,SQRTAB
MOVAL,DAT
TESTAL,80H
JNSNEXT
NEGAL
NEXT:XLATSQRTAB
MOVSQR,AL
POPBX
POPAX
RET
SUBROTENDP
CODEENDS
ENDSRART
3.试编写出把DX、AX中的双字右移四位的程序段。
MOVCL,04
SHRAX,CL
MOVBL,DL
SHRDX,CL
SHLBL,CL
ORBL,AH
4.定义一个数据区,它包含有23H,24H,25H和26H四个字符数据,把这个数据区复制20次,并显示出复制结果。
DATASEGMENT
PATTERNDB23H,24H,25H,26H
DISPLAYDB80DUP(‘’),‘$’
DATEENDS
CODESEGMENT
┇
CLD
LEASI,PATTERN
LEADI,DISPLAY
MOVCX,80
REPMOVSB
MOVAH,09H
LEADX,DISPLAY
INT21H
RET
CODEENDS
一.名词解释(本大题共5小题,每小题3分,共15分)试解释下列名词的含义。
1.逻辑地址
2.物理地址
3.标志寄存器
4.存储器寻址方式
5.补码
二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。
1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少?
2.假设(DS)=0B00H,(BX)=0210H,对于指令MOVDS:120H[BX],AL,其目的操作数的物理地址为多少?
3.假设(BX)=0210H,(DI)=0060H,对于指令ADDDL,[BX][DI],其源操作数的偏移量为多少?
4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=?5.对于一个十进制数–65,其二进制补码表示形式为多少?
三.排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。
1.PUSH5588H
2.MOVDS,1720H
3.ADDAX,CL
4.ANDAX,[DX]
四.程序分析题(本大题共6小题,每小题5分,共30分)每小题列出了一段小的程序片段和相关存储单元的初始值,请按题目的要求分析各程序片段的运行结果。(寄存器中的内容请使用十六进制形式给出)
1.阅读如下程序片段
MOVAL,4CH
MOVBL,0B5H
ADDAL,BL
执行上述程序片段后,(AL)=,(BL)=,
CF=,OF=,PF=.
2.阅读如下程序片段
MOVAL,0F3H
MOVDL,0C4H
ADDAL,DL
ANDAL,0FH
执行上述程序片段后,(AL)=,(AF)=,CF=,OF=,PF=.
3.阅读如下程序片段
MOVAL,7EH
MOVCL,04H
ROLAL,CL
执行上述程序片段后,(AL)=,(CL)=,
CF=,OF=.
4.阅读如下程序片段
MOVAX,0632H
MOVBX,0C202H
SUBAX,BX
INCAX
执行上述程序片段后,(AX)=,(CF)=,
OF=.
5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)=28H
MOVBX,0024H
LEABX,[BX]
ORBX,0
ADCBX,[BX]
执行上述程序片段后,(BX)=,(CF)=,
OF=.
6.阅读如下程序片段,假设(SP)=0064H
MOVAX,0001H
MOVBX,0002H
PUSHAX
PUSHBX
POPCX
POPBX
执行上述程序片段后,(AX)=,(BX)=,
(SP)=,
五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分)1.试编写一程序片段,实现BL高4位与低4位相互交换(7分)
2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/2的功能(AX中的数据理解为补
最佳答案
1.逻辑地址源程序经过汇编或编译后,形成目标程序,每个目标程序都是以0为基址顺序进行编址的,原来用符号名访问的单元用具体的数据——单元号取代。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称逻辑空间。在逻辑空间中每条指令的地址和指令中要访问的操作数地址统称为逻辑地址。
2.物理地址内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可惟一标识一个存储单元,称为内存地址(或物理地址)。
3.标志寄存器用来保存程序执行结果或者状态的寄存器,由各个标志位组成,标志寄存器中的标志位分两种类型:状态标志位和控制标志位,分别用来反应结果状态或控制程序执行的。
状态标志位常用的有ZF(零标志位)、SF(符号标志位)、PF(奇偶标志位)、CF(进位标志位)、OF(溢出标志位)、AF(辅助进位标志位);
控制标志位常用的有DF(方向标志位,用于串处理操作方向控制的)、TF(单步执行的跟踪标志位)、IF(中断允许标志位)。
4.存储器寻址方式在指令中,有时要寻找操作数的地址,有时要寻找转移地址(如转移指令、CALL指令等),这些寻找地址的方式就称为寻址方式。8086微处理器寻找操作数地址有七种方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等;寻找转移地址的方式有段内寻址和段间寻址,它们又分为段内直接、段内间接、段间直接、段间间接寻址等。
5.补码补码是计算机底层运算中,对运算符的一种表示方法。主要功能是将减法的运算转化为加法运算。
简单的说对于一个二进制数来说,正数的话它的原码,反码,补码都一样.
如果机器数是负数,反码是对它的原码(符号位除外)各位取反而得到的.补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。
1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少?
(1100100)2,(64)16
2.假设(DS)=0B00H,(BX)=0210H,对于指令MOVDS:120H[BX],AL,其目的操作数的物理地址为多少?
0B00H*10H+210H+120H=B330H
3.假设(BX)=0210H,(DI)=0060H,对于指令ADDDL,[BX][DI],其源操作数的偏移量为多少?
这道题说的不明白,偏移量是相对于谁的,如果相对于段,210H+60H=270H如果相对于基址,就是DI,60H
4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=?执行push,指针减小,每次占用两个字节,60H-2*5=56H
5.对于一个十进制数–65,其二进制补码表示形式为多少?
(65)2=1000001,取反0111110,加一0111111,加符号10111111
三.排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。
1.PUSH5588H;push的源操作数不能是立即数
2.MOVDS,1720H;给段寄存器赋值不能给立即数
3.ADDAX,CL;AX是16位的,CL是8位的,不能相加
4.ANDAX,[DX];DX不是基址寄存器
四.程序分析题(本大题共6小题,每小题5分,共30分)每小题列出了一段小的程序片段和相关存储单元的初始值,请按题目的要求分析各程序片段的运行结果。(寄存器中的内容请使用十六进制形式给出)
1.阅读如下程序片段
MOVAL,4CH
MOVBL,0B5H
ADDAL,BL
执行上述程序片段后,(AL)=1H,(BL)=B5H,
CF=1,OF=0,PF=0.
2.阅读如下程序片段
MOVAL,0F3H
MOVDL,0C4H
ADDAL,DL
ANDAL,0FH
执行上述程序片段后,(AL)=7,(AF)=0,CF=0,OF=0,PF=1.
3.阅读如下程序片段
MOVAL,7EH
MOVCL,04H
ROLAL,CL
执行上述程序片段后,(AL)=e7H,(CL)=4,
CF=1,OF=0.
4.阅读如下程序片段
MOVAX,0632H
MOVBX,0C202H
SUBAX,BX
INCAX
执行上述程序片段后,(AX)=4431H,(CF)=1,
OF=0.
5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)=28H
MOVBX,0024H;bx=24h
LEABX,[BX];bx=56h,cf=1
ORBX,0;bx=56h,cf=0
ADCBX,[BX];应该加56H那个单元的内容
执行上述程序片段后,(BX)=56H+[01056H],(CF)=取决于[01056H]是多少,OF=取决于[01056H]是多少,.
这道题如果不是你贴错了,就是出题的搞错了
6.阅读如下程序片段,假设(SP)=0064H
MOVAX,0001H
MOVBX,0002H
PUSHAX
PUSHBX
POPCX
POPBX
执行上述程序片段后,(AX)=1,(BX)=1,
(SP)=64H,
五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分)1.试编写一程序片段,实现BL高4位与低4位相互交换(7分)
pushax
moval,bl
shlbx,1
shlbx,1
shlbx,1
shlbx,1
andal,f0
shrax,1
shrax,1
shrax,1
shrax,1
andal,0f
orbl,al
popax
2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/2的功能(AX中的数据理解为补码)(8分)
pushbx
movbx,ax
shlax,1
shlax,1
addax,bx
addax,14
shrax,1
popbx
一、填空题(15)
5.指令中所用到的操作数可存放于______________,______________或______________中。
6.子程序的参数传送方式有______________,______________,______________等。
7.计算机中的指令由(操作数)字段和地址码字段两部分组成。
二、选择题(24)
1.用户为了解决自己的问题,用汇编语言所编写的程序,称为()
A.目标程序B.源程序
C.可执行程序D.汇编程序
2.某系列微机对存储器的分段,如果每一个段最多的字节存储单元是64K,那么表示段内字节单元偏移地址的二进制位数应是(B)
A.20位B.16位
C.15位D.12位
3.设SP初值为2000H,执行指令“PUSHAX”后,SP的值是(B)
A.1FFFHB.1998H
C.2002HD.1FFEH
4.循环指令LOOP产生循环的条件是()
A.CX-1=1B.CX-1=0
C.CX-1≠0D.CF=1和ZF=0
5.汇编语言源程序中,每个语句可由四项组成,其中名字项是一个符号,下面列出的有效名字是()
A.VariableB.First&ld
C.0FFFFHD.‘Memphis’
6.要求将A,B两个字符的ASCⅡ码41H,42H顺序存放在连续两个字存储单元中,可选用的语句是()
A.DA1DB‘AB’B.DA1DW‘AB’
C.DA1DB0ABHD.DA1DW‘ABH7.某程序装入内存后,DS=1200H,CS=1400H,则程序中数据段中的数据最多
)字节。是(
A.2KB.4K
C.8KD.16K
8.有语句:COUNTEQU256下列四种叙述中,正确的是()。
A.COUNT是变量B.COUNT占用一个字节存储单元
C.COUNT是符号常数D.COUNT占用二个字节存储单元9.下面指令中,源操作数的寻址方式为立即寻址的是()。
A.MOVAX,OFFSETAB.MOVAX,A
C.MOVAX,1D.MOVAX,A〔BX〕
10.下列指令执行后,不改变AL寄存器内容的指令是()。
A.ANDAL,1B.CMPAL,DL
C.XORAL,ALD.SUBAL,DL
11.执行1号DOS系统功能调用,从键盘输入的字符值存放在()寄存器中。
A.ALB.BL
C.CLD.DL
12.将CX寄存器低4位清零的正确指令是()。
A.ANDCX,0F0HB.ANDCX,0FFF0H
C.ANDCX,1110HD.MOVCX,0
最佳答案
一、
5、数据段、代码段、附加段(堆栈段也应该可以啊,怎么只有三个空?)
6、约定寄存器法、约定存储单元法、堆栈法
7、操作码
二、
1.B
2.B
3.D(这可是十六进制的操作哦,2000H-2=1FFEH)
4.C
5.A
6.A
7.C(14000H-12000H=2000H,转换成10进制是8192,即8k)
8.C
9.C
10.B
11.A
12.B
2
回答时间:2007-1-1008:48|我来评论
一,单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分)
1.指令JMPFARPTRDONE属于
A.段内转移直接寻址
B.段内转移间接寻址
C.段间转移直接寻址
D.段间转移间接寻址
[解析]略
2.下列叙述正确的是参考答案为:C参考答案为:C
A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令
B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令
C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令
D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令
[解析]对于无符号数和有符号数的比较都采用CMP指令;
CMPS指令是串比较指令;
对两个有符号数的条件转移指令应是:JAE、JNB、JBE、JNA;
对两个无符号数的条件转移指令应是:JGE、JNL、JLE、JNG。
3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是
A.12CSBH
B.12B6BH
C.12C59H
D.12BFEH
[解析]末字与首字相隔(128-1=)127个字,且每个字占用2个字节,因此末字单元的物理地址应为:
首字单元的物理地址+(128-1)×2
即12ABH×10H+00ABH+(128-1)×2=12C59H。
4.在下列指令的表示中,不正确的是
A.MOVAL,[BX+SI]
B.JMPSHORTDONI
C.DEC[BX]
D.MULCL
[解析]当只有一个存储器操作数时,这个操作数的类型不明确,例如选项C中的
[BX],没有明确的说明访问该存储单元的类型,此时存储器操作数就必须需用类型说明,如
DECBYTEPTR[BX]或DECWORDPTR[BX]参考答案为:C参考答案为:C
但是在题目的选项C中,没有指出存储器操作数类型,所以该指令是不正确的;而其它选项中的指令均是正确的。
5.在进行二重循环程序设计时,下列描述正确的是参考答案为:A
A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内
B.外循环初值应置外循环之内;内循环初值应置内循环之内
C.内、外循环初值都应置外循环之外
D.内、外循环初值都应置内循环之外,外循环之内
[解析]循环参数置初值,应在进入循环以前给出。
6.条件转移指令JNE的测试条件为参考答案为:A
A.ZF=0
B.CF=0
C.ZF=1
D.CF=1
[解析]略。
7.8086CPU在基址加变址的寻址方式中,变址寄存器可以为
A.BX或CX
B.CX或SI
C.DX或SI
D.SI或DI
[解析]略参考答案为:D
8.已知BX=2000H,SI=1234H,则指令MOVAX,[BX+SI+2]的源操作在()中。考答案为:A
A.数据段中偏移量为3236H的字节
B.附加段中偏移量为3234H的字节
C.数据段中偏移量为3234H的字节
D.附加段中偏移量为3236H的字节参
[解析]指令中的源操作数的寻址方式是相对基址变址寻址,且由于其中的基址寄存器采用的是BX,所以源操作数是在数据段中,其偏移量为:
BX+SI+2=2000H+1234H+2=3236H
9.执行如下程序:
MOVAX,0
MOVBX,1
MOVCX,100
A:ADDAX,BX
INCBX
LOOPA
HLT
执行后(BX)=
A.99
B.100
C.101参考答案为:C
D.102
[解析]1)在进入循环之前,有三条指令分别初始化寄存器:AX为0、BX为1、CX为100;
2)由于循环的控制部分采用的是LOOP指令,该指令有使CX减1,并判断其是
否为0的功能,所以可知该循环的执行次数为100次;
3)循环体的主要功能是每次循环使AX中的内容累加BX的内容,并使BX的内
容加1。
4)直到最后一次(即第100次)循环时,加到AX中的BX的内容为100,且使
BX加1,即变为101后退出循环体。所以当执行完该段程序后,BX的内容为101。
5)该段程序的功能是(AX)=1+2+……+100=505010.上题的程序执行后(AX)=A.5000B.5050C.5100D.5150
[解析]请参看上题中的分析。
正确答案:B。11.对于下列程序段:
AGAIN:MOVAL,[SI]MOVES:[DI],ALINCSIINCDI
参考答案为:B
LOOPAGAIN
也可用______指令完成同样的功能。A.REPMOVSBB.REPLODSBC.REPSTOSBD.REPESCASB
[解析]该段程序的功能是将SI所指向的数据段中的数据顺序传送给DI所指向的附加段的一段数据区中,并且每次传送一个字节,即实现了字节串传送的功能,所以也可以使用REPMOVSB指令来完成同样的功能。
12.下面指令序列执行后完成的运算,正确的算术表达式应是
MOVAL,BYTEPTRXSHLAL,1DECAL
MOVBYTEPTRY,ALA.y=x2+1B.x=y2+1C.x=y2-1D.y=x2-1
[解析]该段程序的第一条指令的功能是将X传送给AL;
第二条指令的功能是将AL的内容左移1位,即使得AL的内容扩大2倍;第三条指令的功能是使AL的内容减1;
参考答案为:D
参考答案为:A
第四条指令的功能是将AL传送给Y;综上所述该程序完成的运算是Y=2X-1。
13.在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来。参考答案为:B
A.占内存空间小,但速度慢B.占内存空间大,但速度快C.占内存空间相同,速度快D.占内存空间相同,速度慢
[解析]1)宏指令简化程序的书写,不节省程序存储空间,但执行时间比子程序短。
2)子程序简化程序的书写,也节省程序的存储空间,但执行时间比宏指令长。14.在程序执行过程中,IP寄存器中始终保存的是A.上一条指令的首地址B.下一条指令的首地址C.正在执行指令的首地址D.需计算有效地址后才能确定地址
[解析]在程序运行过程中,它始终指向下一条指令的首地址,它与CS代码段寄存器联合确定下一条指令的物理地址。
15.PSW寄存器中共有______位条件状态位,有______位控制状态位。答案为:A
A.6、3B.3、6C.8、4
参考
参考答案为:B
D.4、8
[解析]PSW有6位条件状态位:AF、CF、ZF、PF、SF、OF;
PSW有3位控制状态位:IF、TF、DF16.下列指令执行时出错的是A.ADDBUF1,BUF2B.JMPDWORDPTRDAT[BX]C.MOVAX,[BX+DI]NUMD.TESTAL,08H
[解析]ADD指令的两个操作数不能同时是存储器操作数,所以选项A中的指令是错误的。
17.已知(AX)=1234H,执行下述三条指令后,(AX)=
MOVBX,AXNEGBXADDAX,BXA.1234HB.0EDCCHC.6DCCHD.0000H
[解析]第一条指令的功能是将AX→BX,即BX中的内容为1234H;
第二条指令的功能是对BX求补,即BX中的内容变为-1234H;第三条指令的功能是AX+BX→AX,即1234H+(-1234H)=0→AX;
参考答案为:D
参考答案为:A
所以执行三条指令后,AX的内容为0。
18.在下列指令中,______指令的执行会影响条件码中的CF位。为:D
A.JMPNEXTB.JCNEXTC.INCBXD.SHLAX,1
[解析]JMP、JC指令不任何影响状态标志位;
INC指令执行结果除不影响CF外,其余状态标志位(AF、OF、PF、SF、ZF)都受
影响。
SHL指令使CF=O,OF=O,影响ZF、SF、PF标志位,AF无定义。19.串指令中的目的操作数地址是由______提供。A.SS:[BP]B.DS:[SI]C.ES:[DI]D.CS:[IP][解析]略
20.将DX的内容除以2,正确的指令是A.DIV2B.DIVDX,2C.SARDX,1
参考答案为:C
参考答案为:C
参考答案
D.SHLDX,1
[解析]选项A中的的指令执行的操作是:AX/2;
选项B中的的指令书写格式不正确;
选项C中的的指令执行的操作是:将DX的内容右移一位,将使DX的内容缩小
为原先的1/2,即将DX的内容除以2;
选项D中的的指令执行的操作是:将DX的内容左移一位,将使DX的内容扩大为原先的2倍,即将DX的内容乘以2。二,简答题(每小题4分,共12分)
1.假定(DX)=10111001B,(CL)=0.3,(CF)=1,试确定下列各条指令单独执行后,DX中的值。
(1)SHRDX,1(2)RCRDL,1(3)RCLDX,CL
答:(1)005CH(2)0
0DCH(3)05CCH
[解析](1)指令:SHR
DX,1使DX的内容向右移动了一位,因此DX的内容变为0000’0000’0101’1100B,即005CH。
(2)指令:RCRDL,1
使DL的内容向右循环带进位移动了一位,DH的内容不变,因此DX的内容变为
0000’0000’1101’1100B,
即00DCH。
(3)指令:RCLDX,CL使DX的内容向左循环带进位移动了3位,因此DX的内
容变为0000’0101’1100’1100B,即05CCH。
2.写出完成下述功能的程序段:
(1)传送25H到AL寄存器(2)将AL的内容乘以2(3)传送15H到BL寄存器(4)AL的内容乘以BL的内容并请写出最后(AX)=?
答:(1)MOVAL,25H
(2)SHLAL,1(3)MOVBL,15H(4)MULBL
最后,(AX)=612H=1554
[解析]1)将AL的内容左移1位,将使它的内容扩大2倍,即使AL的内容乘
以2。
2)最后,AX的内容应为25H*2*15H=612H=15543.写一程序段,求双字长数DX∶bX的相反数。
答:NEGDX
NEGAXSBBDX,0
[解析]求双字长数DX:AX相反数,即对其求补,所以应实现的操作是:
(DX:AX)←0-(DX:AX)即0:0-)DX:AX
将上面的算式分解后,即为对DX求补,对AX求补,并从DX中减去将AX求补
时产生的借位。所以相应的指令就是:
NEGDXNEGAXSBBDX,0
三,程序分析题(每小题6分,共36分)
1.现有如下程序段:
DATASEGMENTDA3EQU1234HORG0020HDA4EQU$-DA2DA1DW12H,23HDA5DB31H,32HDA2DB11H,21HDATAENDS
请回答:(1)该程序段已占有的存储字节数是多少?(2)符号名DA4的值是多少?符号名DA5的值是多少?答:(1)该程序段已占有的存储字节数是8个字节。(2)符号名DA4的值为2,符号名DA5的值是0026H。
[解析]1)伪指令ORG0020H,设置存储单元起始偏移地址为0020H;
2)符号名DA1的值(即所对应存储单元的偏移地址)是0020H,该数据区的类
型为字,有2个字数据,所以共占用4个字节;
3)符号名DA2的值(即所对应存储单元的偏移地址)是0024H,该数据区的类
型为字节,有2个字节数据,所以共占用2个字节;
4)经EQU定义的符号名DA3、DA4不占用存储空间,“$”用来表示当前地址
计数器的值(0026H),可它们的值分别为DA3=1234H,DA4=2。
5)符号名DA5的值(即所对应存储单元的偏移地址)是0026H,该数据区的类
型为字节,有2个字节数据,所以共占用2个字节;
6)综上所述,该程序段共占有的存储字节数8个字节。2.执行下列程序段后,回答问题。
ORG1221HMOVBX,OFFSETNUMNUMDW12HMOVCL,BYTEPTRNUM+1…MOVCH,TYPENUMMOVAX,NUMHLT
请问:(AX)=______,(BX)=______,(CX)=______。
答:(AX)=0012H(BX)=1221H(CX)=0200H
[解析]1)指令MOVAX,NUM的功能是将NUM单元的字内容12H传送给AX,使
得(AX)=0012H;
2)指令MOVBX,OFFSETNUM的功能是将NUM单元的偏移地址1221H传送给BX,
使得(BX)=1221H;
3)指令MOVCL,BYTEPTRNUM+1的功能是将NUM+1(1222H)单元的字节内容(即
NUM字单元的高字节)00H传送给CL,使得(CL)=00H;
4)指令MOVCL,TYTENUM的功能是将NUM字单元的类型字节数2传送给CH,
使得(CH)=02H;
5)综合第4和第5点,可知CX寄存器的内容为0200H。3.阅读如下程序:
ADRRDBXXH,XXH,……,XXHCMPADRR[BX],0NUMEQU$-ADRRLOOPZDONRETTDB?JNZNEXT…MOVBL,OFFH
MOVCX,NUMNEXT:MOVRETT,BLMOVBX,-1HLTDON:INCBX
请问:(1)该程序完成的功能是什么?
(2)程序执行后指出RETT字节单元中的内容是什么?
答:(1)在以ADRR为起始地址的数组中,查找第一个非0数据。
(2)若找到则将第一个非0数据在数组中的偏移量送入RETT单元中;若无非0
数据,则将OFFH送入RETT单元中。
[解析]1)程序的前3条指令,用于定义数据:以ADRR为起始地址的数组;NUM的值为ADRR数组的数据个数;RETT是一个空的字节单元
2)该程序的主体是一个循环,该循环的主要功能是在数组ADRR中第一个非0数据。如果是由于找到,则将第一个非0数据在数组中的偏移量送入RETT单元中;若没找到非0数据,则将OFFH送入RETT单元中。
4.现有一子程序:
SUB1PROCPLUS:TESTBL,80H
TESTAL,80HJEEXITO
JEPLUSXCHANGE:XCHGAL,BL
TESTBL,80HEXITO:RET
JNEEXITOSUB1ENDP
JMPXCHANGE
试回答:(1)子程序的功能是什么?
(2)若调用子程序前AL=9AH,BL=77H,则返回主程序时,AL=______,
BL=______。
答:(1)子程序的功能是判别AL和BL中的数是否为异号数,当为异
号时交换,否则不变。
(2)AL=77H,BL=9AH
[解析]1)数据是以二进制的形式存储在计算机中的。数据对应的二进制数的最高位是数据的符号位:若为0表示该数为正数,若为1表示该数为负数;
2)TESTAL,80H和TESTBL,80H指令是在测试AL和BL的最高位(即符号位)的状态是1还是0。
3)若两个数的最高位(即符号位)的状态不同的时候(即两数为异号),则执行XCHANGE标号所对应语句,即交换AL和BL中的内容。
4)否则若两个数的最高位(即符号位)的状态相同的时候(即两数为同号),则执行EXIT0标号所对应语句,程序结束,即AL和BL中的内容不被。
5)所以第二问中,AL=9AH,BL=77H:AL中的数据的最高位为1,BL中的数据的最高位为0,即两个数为异号,所以要交换AL和BL中的内容,即AL=77H,BL=9AH。
5.阅读程序段:
BLOCKDB20H,1FH,08H,81H,OFFH…LOP1:CMPAL,[SI+1]
RESULTDB?JNGNEXT
…MOVAL,[SI+1]
START:LEASI,BLOCKNEXT:INCSI
MOVCX,[SI]LOOPLOP1
INCSIMOVRESULT,AL
MOVAL,[SI]HLT
请问:(1)该程序完成的功能是什么?
(2)该程序循环的次数是多少?
答:(1)该程序完成的功能是从20H(32)个有符号数中找出最小的
数送入RESULT单元中。
(2)该程序的循环次数是1FH(31)。
[解析]1)指令LEASI,BLOCK的功能是使SI指向了BLOCK数组的首单元;
2)指令MOVCX,[SI]的功能是将SI指向单元的内容20H传送给CX,即(CX)=20H;其后又有指令DECCX,使得CX的内容变为1FH;再看循环体的控制部分采用的指令是LOOP,可知,该循环的执行次数为1FH次;
3)循环体的主要功能是将AL中的内容与[SI]所指向数组的每一个数据进行比较,从数组中选出最小数保存在AL中。
4)由于比较后采用的转移指令是JNG,所以该程序处理的显然是一组有符号的数据。
6.阅读如下程序段,回答所提出的问题,假定X1,X2,XN为无符号数。
ORG100H
BLOKDWX1,X2,…,XN
COUNTEQU($-BLOLOK)/2
RESULTDWCOUNT,?
LEABX,BLOK-2
MOVCX,RESULT
XORAX,AX
GOON:ADDBX,2
CMPAX,[BX]
JAENEXT
MOVAX,[BX]
NEXT:LOOPGOON
MOVRESULT+2,AX
程序段执行完,回答下述问题
RESULT+2字存储单元的内容=______
BX=______
程序循环次数=______
答:RESULT+2字存储单元的内容是MAX(X1,X2,…XN)
BX=100H+2×(COUNT-1)
程序循环次数=COUNT
[解析]1)该程序段的开始4条指令定义了以下数据:
以BLOK为起始地址的字数组,该数组首单元的偏移地址(即BLOK)为100H;COUNT的值为BLOK字数组的数据个数;
RESULT存储区的第一个字的内容为COUNT,即BLOK字数组的数据个数;第二个字的内容为空。
2)循环体的主要功能是从BLOK字数组中找出最大数送入RESULT的第二个字单元中;
3)循环次数为数组中数据的个数,即COUNT个。
4)当循环结束后,BX中将存放最后一个字数据的偏移地址:首字偏移地址+末字与首字的相隔的字节数,即100H+2×(COUNT-1)。
四,程序填空题(注意:下列各小题中,每空只能填一条指令!每小题6分,共12分)
1.在表TABLE处存放着N个无符号字节数,求表中前10个字节数的总和并保存在AX寄存器中。如果总和值超过AX寄存器的容量,则置AX寄存器内容不变。请在程序中的空格处填入适当指令使其完整。
LEABX,TABLE(2)
MOVCX,10JCEND0
MOVSUM,AXDON:INCBX
MEXT:(1)(3)
ADCAH,0ENDO:HLT
JNCDON
答:(1)ADDAL,[BX]
(2)MOVAX,SUM
(3)LOOPNEXT
[解析]1)程序的前三条指令的功能分别是:
将表TABLE的首址传送给BX;
将循环次数传送给计数器CX;
将AX的原值保存在SUM单元中;
以上指令实现了设置循环初始参数的功能。
2)标号NEXT所对应的第一个空白处就是循环体的第一条指令。根据题目的要求——求表中前10个字节数的总和,可知循环每次应实现将表TABLE中的数据按字节加法的方式进行累加到AL中,并且将字节加法产生的进位加到AH中。所以第一个空白处应填入指令:
ADDAL,[BX]
3)程序的第五条指令实现的是判断求得的和是否超过AX寄存器的容量。
4)如果有进位(即已超过AX寄存器的容量),则执行第二个空白处的指令,根据题目当出现此种情况时,使AX内容不变,即恢复其原值,因此第二个空白处应填入指令:MOVAX,SUM。
5)如果没有进位(即未超过AX寄存器的容量),则转DON。程序将使BX的内容加1,即使其指向下一个表中的字节数据。接下来就应该将计数器CX减1,并判断是否继续下一次循环。因此,第三个空白处应填入指令:LOOPNEXT。
2.BEG为起始地址的存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。请在程序中的空格处填入适当的指令使其完整。
MOVCX,32H
LEASI,BEG
MOVDI,SI
(1)
DON:MOVAL,[SI]
(2)
MOV[SI],AL
(3)
DECDI
LOOPDON
HLT
答:(1)ADDDI,99
(2)XCHGAL,[DI]
(3)INCSI
[解析]1)题目要求:将以BEG为起始地址的区域中的100个字节数据首尾颠倒存放。例如,如果原先为X1,X2,X3,…,X98,X99,X100,则首尾颠倒后将变为X100,X99,X98,…,X3,X2,X1。
2)颠倒的方法是:将X1与X100对调、X2与X99对调、X3与X98对调、……,即将前一半的数据与后一半相应位置的数据对调。这个过程每次处理两个数据,所以共有(100/2=)50对数据对调。
3)根据以上分析可知,这个循环将进行50(32H)次,每次将相应的两个数据对调,这两个数据可分别由两个寄存器来指向。
4)阅读程序可知,SI寄存器指向前一半中的某个数据,DI寄存器指向后一半中对应的数据。在循环的初始化部分,使应计数器CX的值为50(或32H),SI指向第一个数,DI指向最后一个数,所以第一个空白处应填入指令:ADDDI,99。
5)在循环体中,应首先交换SI和DI所指向单元的内容,然后使指针SI加1、DI减1,所以第二、三个空白处应填入指令:
①XCHGAL,[DI]
②INCSI
五,编制程序题(第1小题6分,第2小题14分,共20分)
1.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
答:1.BEGIN:MOVAH,1
INT21H
CMPAL,’a’
JBSTOP
CMPAL,’z’
JASTOP
SUBAL,20H
MOVDL,AL
MOVAH,2
INT21H
JMPBEGIN
STOP:RET
[解析]1)该程序设计的主体应是一个循环——当输入字符的是小写字母(a~z)时,就将其转换为大写字母来显示,此过程循环进行,直到当输入的不是小写字母时,程序结束。
2)输入一个字符的可使用DOS的1号功能实现:
MOVAH,1
INT21H
该DOS调用执行完后,会将输入的字符的ASCII码值送入AL寄存器。
3)判断输入的是否为小写字母(a~z)的方法:
CMPAL,‘a’
JBSTOP;不是小写字母时,转STOP
CMPAL,‘z’
JASTOP;不是小写字母时,转STOP
…;是小写字母时,将其转换为大写显示
STOP:RET;不是小写字母时,程序结束
4)小写字母比大写字母的ASCII码值大20H,因此指令SUBAL,20H,将使AL中的内容变为大写字母的ASCII码值。
5)输出一个字符的可使用DOS的2号功能实现:
MOVDL,AL
MOVAH,2
INT21H
2.设在内存单元SQTAB首址开始存放了0~15的平方数表。要求用直接查表法编一程序,求出A单元中给定数(<=15=的平方值送B单元保存。
答:DATASEGMENT
SQTABDB0,1,4,9,16,25,36,49,64,81
DB100,121,144,169,196,225
ADB12
BDB?
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
STARTPROCFAR
PUSHDX
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETSQTAB
MOVAL,A
XLAT
MOVB,AL
RET
STARTENDP
CODEENDS
ENDSTART
[解析]1)根据题目的要求,应首先建立0~15的平方数表以及A和B单元:SQTABDB0,1,4,9,16,25,36,49,64,81;平方数表
DB100,121,144,169,196,225
ADB12;给定数(
BDB?;存放A中数的平方值的结果单元
2)A中给定的数恰好是该数平方值在平方数表中的相对位置,因此,可通过换码指令XLAT来实现从表中求平方值:
MOVBX,OFFSETSQTAB
MOVAL,A
XLAT