内容发布更新时间 : 2024/11/14 14:25:24星期一 下面是文章的全部内容请认真阅读。
1. (1)定义字节变量的伪指令助记符是_BYTE,获取变量名所具有的偏移地址的操作符是_OFFSET。 2. (2)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是10进制数__97;如果它是某个ASCII码,则代表字符__a。
3. C语言用“\\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个 是回车,其ASCII码是_0DH,它将光标移动到当前所在行的首位;另一个是换行, 其ASCII码是_0AH,它将光标移到下一行。 4. 数据段有语句“H8843 DWORD 99008843H”,代码段指令“MOV CX, WORD PTR H8843”执 行后,CX=__8843H;代码段指令“MOV CL, BYTE PTR H8843”执行后,CX=_____________。 5. 数据段有语句“XYZ DWORD ?”,则XYZ的类型是_DWORD,用“TYPE XYZ”会得到数值为__4。
6. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV CL, ABC+3”执行后,CL =_4; “MOV CL, ABC+8”执行后,CL=_9。 7. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV AX, WORD PTR ABC”执 行后,AX=_; “MOV EAX, DWORD PTR ABC”执行后,EAX=_________。
8. 顺序执行指令“XOR EAX, EAX”和“SUB EAX, EAX”后,EAX=_0,OF=_0。 9. 顺序执行指令“XOR EAX, EAX”和“DEC EAX”后,EAX=_0,CF=_0。 10. 欲将EDX内的无符号数除以16,使用指令“SHR EDX, _4”; 欲将EAX内的有符号数除以16,使用指令“____________________”。
11. 已知:X补=10101100B,Y补=11000110B,则:[X+Y]补= [1]01110010 , [X-Y]补= _01100110 。
12. 设字长为八位,有x= -1,y=124,则有:[x+y]补=__123, [x-y] 补=__-125。
13. 已知:寄存器AX=7836H,指令: ADD AX,9A5EH执行后,AX=__1295H CF=_1。 14. 已知:寄存器AX=7836H,指令: ADD AX,9A5EH执行后, OF=_0,SF=_1_。 15. \~\的ASCII码值是__30H~39H,\~\的ASCII码值是__41H~5AH。. 五.简答题
1. 使用二进制8位表达无符号整数,257有对应的编码吗? 没有。使用二进制8位表达无符号整数,257没有对应的编码。 2. 字符“'F'”和数值46H作为MOV指令的源操作数有区别吗? 字符“'F'”的ASCII码就是数值46H,所以没有区别。
3. 为什么可以把指令“MOV AX, (34+67H)*3”中的数值表达式看成是常量?
汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。 4. 数值500,能够作为字节变量的初值吗?
不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。 5. 为什么说“XCHG EDX,CX”是一条错误的指令?
源、目标寄存器位数不同,不能用该指令进行数据交换。
6. 都是获取偏移地址,为什么指令“LEA EBX, [ESI]”正确,而指令“MOV EBX, OFFSET[ESI]”就错误?
前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。 7. INC,DEC,NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数? INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。 8. 大小写字母转换的规律是什么?给出转换的公式。 大小写字母转换利用它们的ASCII码相差20H。
第4章 指令系统
一.选择
1. 11. 计算机内的“溢出”是指其运算的结果 ( )。 A.无穷大或无穷小 B.超出了内存单元所能存储的数值范围 C.超出了寄存器能存储数值的范围 D.超出了该指令所指定的结果能存储的数值范围 2. 计算机内的“溢出”是指其运算的结果 ( )。 A.无穷大或无穷小 B.超出了内存单元所能存储的数值范围 C.超出了寄存器能存储数值的范围 D.超出了该指令所指定的结果能存储的数值范围 3. 16位二进制无符号数的数值范围是( )。 A.0 ~ 65535 B.0 ~ 65536 C.0~ 32767 D.0 ~ 32768 4. 最大的10位无符号二进制整数转换成十进制数是 。 A. 51 B. 512 C. 1023 D. 1024 5. ADD 指令不能影响标志寄存器的( )位。 A.ZF B. SF C.CF D. TF 6. INC 指令不能影响标志寄存器的( )位。 A.ZF B. SF C.CF D. DF 7. DEC 指令不能影响标志寄存器的( )位。 A.ZF B. SF C.CF D. IF 8. 在执行DIV或IDIV指令发生错误时会产生( )中断。 A.线路故障 B.内部 C.外部 D.单步 9. 在执行ADD或SUB指令发生溢出错误时( )。 A.不产生任何中断 B. 会产生内部中断 C. 会产生外部中断 D. 会产生单步中断
10. 完成同指令XCHG AX,BX相同功能的指令或指令序列是( )。 A. MOV AX,BX B. MOV BX,AX C. PUSH AX D. MOV CX,AX POP BX MOV AX,BX MOV BX,CX
11. 顺序执行PUSH EAX和POP EBX两条指令,其功能等同于( ) A.MOV EAX, EBX B.MOV EBX, EAX C.XCHG EAX, EBX D.XCHG EBX, EAX 12. 目前在微机中最普遍采用的字符的编码是( )。 A.BCD码 B.ASCII码 C.余三码 D.格雷码
13. 已知X、Y的补码分别为11101011B、00001010B,求X+Y的补码等于( )。 A. 10100001B B. 11011111B C. 11110101B D. 溢出 14. 计算机中( )不能直接表示有符号数。 A.原码 B.补码 C.反码 D.BCD码 15. 下列字母中,ASCII码值最小的是( ) 。 A. K B. Y C. a D. i
16. 当执行完下列指令序列后,标志位CF和SF的值为( )。 MOV AL,0C4H ADD AL,9DH A. 0,0 B. 0,1 C. 1,0 D. 1,1 二.名词解释
1. Program flow control instructions 程序流程控制指令 2. OFFSET Operator:在汇编阶段取得变量的偏移地址。 3. Loop Counter循环计数器,一般为ECX
4. . Pseudo Code:伪代码,又称虚拟代码,是高层次描述算法的一种。 5. Single Dimension Array:一位数组
6. Conditional Loop Instructions:条件循环指令利,用条件转移指令决定是否进行循环。 7. Arithmetic instructions:算数指令
8. Jumps Based on Unsigned Comparisons:无条件转移比较 三.判断
1. VAR是数据段中定义的字变量,指令MOV AX,VAR+2是正确的。T
2. VAR1和VAR2是数据段中定义的字变量,指令MOV AX, VAR1-VAR2是正确的。T 3. VAR1和VAR2是数据段中定义的字变量,指令MOV AX, VAR1+VAR2是正确的。F 4. 执行乘法指令IMUL src时,运算结果不会产生溢出。
5. 执行乘法指令IMUL REG,src时,运算结果不会产生溢出。 6. 定义符号常量时,使用“=”与“EQU”没有区别。F
7. 地址操作符OFFSET可以获取任何寻址方式的内存变量的有效地址。F 8. 指令“SHL”与“SAL”的功能是等价的。T 9. 指令“SHR”与“SAR”的功能是等价的。T
10. 指令“LOOP Lable ”与“DEC ECX JNZ Lable”的功能是等价的。T 11. 32位机不能完成64位整数加法运算。F 12. 只有补码才能表示有符号数。F
13. 指令“LEA”可以获取任何寻址方式的内存变量的有效地址。T
14. 指令“LEA”可以实现求两个寄存器与一个立即数三个数之和的功能。T 15. 堆栈内部中的数据是无法修改的。F 四.填空
1. 顺序执行指令“XOR EAX, EAX”和“SUB EAX, 1”后,EAX=_0_,CF=_0_。 2. 数据段有语句“BUF DWORD 10h DUP( 3 DUP( 2,? ) ,3 ,4 ,5)”,则用“LENGTHOF BUF”会得到数值为_576_,用“SIZEOF BUF”会得到数值为_144_。
3. 已知AL=01100001B,执行指令“AND AL,5FH”后,AL=_41H_;如果AL的内容是某个ASCII码,则代表字符_!_。
4. 已知AL=01000001B,执行指令“OR AL,20H”后,AL=_71H_;如果AL的内容是某个ASCII码,则代表字符_q_。
5. 设字长为八位,-128补=_80_H, -1补=_ff_H。
6. 已知:寄存器AX=7836H,指令: TEST AX,9A5EH执行后, OF=_0_,SF=_0_。
7. 已知:寄存器AX=7836H,指令: CMP AX,9A5EH执行后, AX=_7836H_, OF=__。 8. 要测试AX的第五位是否为1,使用指令__;若要将AL的第五位置为1,使用指令____。(说明:最低位为第0位。)
9. 已知:寄存器AX=9A5EH,指令: NEG AX执行后, OF=_0_,SF=_0 。
10. 已知:寄存器EAX=65536,EBX=32768,指令:DIV EBX执行后, EAX=2。则指令:
DIV EBX执行前EDX的值应为 _,指令:DIV EBX执行后EDX=_______。 11. 已知:寄存器AL=-1,指令:MOVSX BX,AL执行后,BX= ________H;指令:MOVZX CX,AL执行后,CX= ________H。
12. 顺序执行指令序列“XOR EAX,EAX ,DEC EAX ,ADC EAX,0”后,CF=___,ZF=____。 13. 顺序执行指令序列“XOR EAX,EAX ,SUB EAX,1 ,ADC EAX,0”后,CF=___,ZF=____。 14. 已知:寄存器AL=10,BL=-10,指令:MUL BL执行后, AX=________H;而若将指令改为:IMUL BL 则执行后AX=________H;
15. 若要将AX的第五位和第九位置为0,使用指令____________________;若要将AX的第五位和第九位置反,使用指令____________________。(说明:最低位为第0位。) 五.简答题
1. 乘除法运算针对无符号数和有符号数,有两种不同的指令。只有一种指令的加减法如何区别无符号数和有符号数运算?
加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和OF标志,可利用CF和OF进行区别。
2. 逻辑与运算为什么也称为逻辑乘?
逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。 3. 简述逻辑运算指令怎么实现复位、置位和求反功能?
4. 在处理一维数组时,通常可以采用哪些寻址方式?各自的特点是什么?
5. 通常在什么情况下需要使用MOVSX、MOVZX指令?
对无符号数,在前面加零实现零位扩展。对应指令MOVZX;对有符号数进行符号扩展,即用一个操作数的符号位(最高位)形成另一个操作数,对应指令MOVSX 6. 通常在什么情况下需要使用PTR类型操作符?举例说明。
如在指令“MOV EAX,DWORD PTR ARRAY”,EAX是双字,变量ARRAY被定义为字量,两者类型不同,MOV指令不允许不同类型的数据传送,利用PTR改变ARRAY的类型,将其传送给EAX.
7. ESP是通用寄存器,是否可以随意的修改ESP的值?
不可以,堆栈段的范围由堆栈执政寄存器ESP的初值确定,这个位置就是堆栈的底部(不再变化),因此不能随意改变ESP的值。
8. 大小写字母转换的规律是什么?给出转换的公式。 大小写字母转换利用它们的ASCII码相差20H。SUB BL 20H:实现小写字母转换为大写;ADD BL 20H:实现大写字母转换为小写
9. ESP是通用寄存器,是否可以随意的修改ESP的值?
第5章 汇编语言程序设计
一.选择
1. 循环指令LOOP终止循环的条件是( )。 A.ECX=0 B. ECX=0,且ZF=0 C ECX≠0,且ZF=0 D. ECX≠0,或ZF=1 2. 循环指令LOOPNZ终止循环的条件是( )。
A.ECX=0,或ZF=1 B. ECX=0,且ZF=0 C.ECX≠0,且ZF=0 D. ECX≠0,或ZF=1 3. LOOP指令执行时,隐含计数器是( )。
A. ESP B.EBX C. ECX D.EDI 4. 当A>B时转移的条件转移指令为(A、B为无符号数)( )。
A. JA B. JAE C. JG D. JGE 5. 当A>=B时转移的条件转移指令为(A、B为 有符号数)( )。
A. JA B. JAE C. JG D. JGE 6. 条件转移指令JC Label的测试条件是( )。
A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1 7. 若主程序通过堆栈向子程序传递了3个参数,子程序返回主程序时,在子程序中清除堆栈中3个参数正确的RET指令是( )。
A. RET 3*1 B. RET 3*2 C. RET 3*3 D. RET 3*4 8. 主程序通过堆栈向子程序传递了3个参数,子程序调用结束后,在主程序中清除堆栈中3个参数正确的指令是( )。 A. ADD ESP, 3*2 B. ADD ESP, 3*4 C. ADD EBP, 3*2 D. ADD EBP, 3*4 9. 条件转移指令JZ Label的测试条件是( )。
A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1 10. 利用堆栈传递子程序参数的方法是固定的,若主程序通过堆栈向子程序传递了3个参数,则在子程序中, 主程序中最后一个被压入栈中的参数可以用( )的形式来访问。 A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8] 11. 通过堆栈传递参数,在子程序中使用EBP间址取得参数的原因是( )。
A. EBP没有被占用B. EBP间址速度较快C. EBP间址默认的段是堆栈段D. EBP是基址指针 12. 通过寄存器传递参数比通过堆栈传递参数的优点是( )。
A. 能传递更多得参数 B. 存取效率高 C. 能确保正确调用 D. 没有副作用
13. 利用堆栈传递子程序参数的方法是固定的,在子程序中, 修改参数( )可以改变子程序的返回地址。
A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8]
14. 在用LOOP Label 指令构成的循环中,若ECX的初值为-10,则循环体将被执行( )次。
A. 10 B. 0 C. 100 D. >100
15. 在用LOOP Label 指令构成的循环中,若ECX的初值为10,在LOOP Label 指令前有一条“SUB ECX,2” 指令,则循环体将被执行( )次。 A. 10 B. 5 C. 4 D. >10000 二.名词解释 三.判断
1. 指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。T 2. JMP指令对应高级语言的GOTO语句,所以不能使用。F
3. 因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。F 4. JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。F 5. 控制循环是否结束只能在一次循环结束之后进行。F
6. 介绍LOOP指令时,常说它相当于DEC ECX和JNZ两条指令。但考虑对状态标志的影响,它们有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。T 7. CALL指令用在调用程序中,如果被调用程序中也有CALL指令,说明出现了嵌套。T 8. 子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。F 9. 利用寄存器在主子程序间传递参数,其实质就是利用全局变量来传递参数。F 10. 子程序采用堆栈传递参数时,只能在主程序中修改ESP方可保持堆栈的平衡。F