汇编语言期末复习资料

汇编语言期末复习资料
汇编语言期末复习资料

一、单项选择题(本大题共10小题,每小题3分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。

1.CPU要访问的某一存储单元的实际地址称(C)

A. 段地址

B. 偏移地址

C. 物理地址

D. 逻辑地址

2.某存储单元的物理地址是12345H,可以作为它的段地址有(D)

A. 2345H

B. 12345H

C. 12340H

D. 1234H

3.执行后使BX=0的同时也使CF=0,OF=0的指令是(A)

A. XOR BX,BX

B. OR BX,BX

C. AND BX,BX

D. CMP BX,BX

4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是(B)

A. CX≠0且ZF=1

B. CX≠0且ZF=0

C. CX≠0或ZF=1

D. CX≠0或ZF=0

5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是(C)

A. DAA校正指令的功能已自动加在AH中

B. 进位值在AF中,校正后根据AF内容再加在AH中

C. 进位值在CF中,校正后根据CF内容再加在AH中

D. 进位值在AL最高位上,校正后根据AL最高位内容再加在AH中

6. AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是(C)

A. 指令XOR AX,AX执行后,AX内容不变,但设置了标志位

B. 指令OR DX,1000H执行后,将DX最高位置1,其余各位置0

C. 指令AND AX,OFH执行后,分离出AL低四位

D. NOT AX,执行后,将AX清0

7. 在执行下列指令时,需要使用段寄存器DS的指令是(D)

A. STOSW

B. ADD AL,CL

C. NEG BX

D. INC DA[BX]

8. 无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是(B)

A. ADD BH,01H

B. OR BH,01H

C. XOR BH,01H

D. TEST BH,01H

9. 比较两个带符号的数A、B,当A=B时程序转移,测试的条件为(A)

A. ZF=1

B. ZF=0

C. SF=1

D. SF=0

10.下面各传送指令中,正确的是(C)

A. MOV [DI],[SI]

B. MOV[DX+DI],AL

C. MOV WORD PTR [BX],0100H

D. MOV AL,BX

11. 汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(B)

A. 名字的第一个字符可以是大写英文字母及小写英文字母

B. 名字的第一个字符可以是字母、数字及、@、_

C. 名字的有效长度≤31个字符

D. 在名字中不允许出现$

12. 要实现使BETA的值为56,应采用语句为( C)

A .BETA D

B 56 B. BETA DB 56H C. BETA EQU 56 D. BETA EQU 56H

13. REPZ CMPSW指令,重复执行的终止条件是( A )

A. CX=0或ZF=0

B. CX=0且ZF=0

C. CX=0或ZF=1

D. CX=0且ZF=1

14. 下面程序段执行后,AL中的内容是( B )

MOV AX,8833H

ADD AL,AH

DAA

A. 21 B .21H C. 0C1H D. 0DDH

15. 比较两个带符号的数A、B,当A=B时程序转移,测试的条件为(A)

A. ZF=1

B. ZF=0

C. SF=1

D. SF=0

16. 检查二个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP AL,BL”指令后应跟的分支指令是( C )

A. JNC LOP1

B. JA LOP1

C. JC LOP1

D. JGE LOP1

17. 在下列串操作指令中,同时使用源串和目的串地址指针的指令是( D )

A. STOSW

B. LODSW

C. SCASW

D. CMPSW

18. 设AL=0AH,下列指令执行后能使AL=05H的是( C )

A. NOT AL

B. AND AL,0FH

C. XOR AL,0FH

D. OR AL,0FH

19. DA1 DW‘AB’,‘CD’,‘EF’,‘GH’( D )

MOV AX,DA1+3

指令执行后AX中的内容是

A. ‘EF’

B. ‘CD’

C. ‘BC’

D. ‘FC’

20. 使用DOS系统功能调用时,使用的软中断指令是(B)

A. INT 21

B. INT 10H

C. NT 16H

D. INT 21H

二、简答题(每题10分,共30分)

1.简述循环程序常用的控制方法。

解:技术控制:适用于循环次数已知,包括正计数与倒计数两种。采用循环指令LOOP和JCXZ实现,将最大循环次数置入CX,最后用LOOP对CX减1并判断是否为0。条件控制:用于循环次数未知。需要用转移指令判断循环条件,转移指令可以指定目的标号来改变程序运行顺序目的标号指向一个重复执行的语句开始或结束,就构成了循环控制结构,循环体为标号语句至转移指令。混合控制:包括开关控制和逻辑尺控制,前者适用于循环内部有一定规律分支,循环前预置开关走向,结束前设置下一个开关方向。逻辑尺控制适用于内部分支不规律,用位来控制每次循环的操作。

计数控制:循环次数已知,每循环一次+、-1:;常用LOOP指令实现

条件控制:循环次数未知,须根据条件控制循环;用条件转移指令实现

状态控制:根据事先设置或实时检测的状态来控制循环

2.比较参数传递的三种方法,并分析递归调用时为什么不能采用约定存储单元法来传递数据?

寄存器:将入口参数和出口参数放在与约定的寄存器,数据传递速度快,编程方便,节约内存单元,但是寄存器数量有限,适用较少的子程序约定存储单元:不占用寄存器、参数

个数任意,数据都有独立的存储单元,但定义变量有难度。堆栈:不占用寄存器和存储单元,参数放在公共堆栈区,处理后恢复,注意参数的位置断点保存和恢复。

参数传递的方法主要有约定寄存器法、约定存储器法与堆栈法三种。

1.约定寄存器法

约定寄存器法直接利用CPU内部寄存器传送参数。在转向子程序之前,主程序将入口参数送入指定寄存器中;调用子程序后,子程序从指定寄存器引用这些参数。经加工处理的结果也放入指定的寄存器中,这样从子程序返回主程序后可以从指定的寄存器中获得处理结果。这种方法最简单,但由于寄存器资源有限,故仅适用传递参数较少的情况。

2.约定存储器法

约定存储器法是在存储器中专门指定一些单元存放入口参数和出口参数。在转子程序之前,主程序用数据传送指令将入口参数存入入口参数的存储单元中。调用子程序后,子程序按照约定从入口参数存储单元中取出这些参数进行处理。子程序完成处理,将处理结果送入指定的出口参数存储单元中,返回后主程序可从这些特定存储单元中获取需要的处理结果。约定存储器法传送速度比约定寄存器法要慢些,适合于传递参数较多的情况。

3.堆栈法

堆栈法使用堆栈来完成数据传递。在调用子程序之前将参数压入堆栈,转入子程序后通过sP指针获得压入堆栈的参数地址,从而将其取出。子程序的处理结果亦送入堆栈保存。返回主程序后再通过出栈指令取出结果。使用该方法时应明了堆栈的变化情况,特别注意参数入栈与出栈顺序。

堆栈法适合于参数较多且子程序有嵌套、递归调用的场合。

3.简述外部中断和软件中断的中断过程。

中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。外部中断:当中断源向CPU发出中断请求,CPU接受请求在一定条件下暂停执行原程序进行中断处理,执行完中断服务程序后再返回断点继续执行原程序。软件中断:是一条CPU指令,用以自陷一个中断。由于软中断指令通常要运行一个切换CPU至内核态的子例程,它常被用作实现系统调用.

4.简述循环程序结构的一般组成。

初始化部分:在循环程序的开头,先执行。设置地址指针的初值、计数器的初值及程序中用到的某些寄存器和某些内存单元的初值,只执行一遍。工作部分:从初始化部分设置的初值开始,动态地反复执行相同的操作,实现循环程序的功能。修改部分:对参加运算的数据或地址指针和记过单元地址指针修改控制部分:按预定循环次数的执行和正常退出循环。

5.简述多分支程序实现的一般步骤与常用处理方法。

使用条件转移JCC指令和无条件专题JMP指令实现分支程序结构。获得条件变量-->对应转换为地址表入口偏移-->BX=BX+入口偏移JMP[BX]跳转到相应位置。常用地址表的方法。无法使用地址表,只能通过多条条件转移指令实现。

6.简述完整子程序结构所包含的内容。

子程序也是一段程序,由文字说明和子程序本身构成。一般由子程序名、子程序的功能。子程序选用的寄存器名和存储单元分配、子程序入口参数、子程序出口参数。

三.编写程序,计算两个64位数的和,不考虑和的进位。(20分)

由于64位数占用的寄存器比较多,故适合于用约定存储单元法来进行处理。

程序中将64位加数mMl和M.M2存放在两个双字单元内。由于不考虑和的进位,所以和也可用两个双字单元来存放。

程序如下:

DATA SEGMENT

NUMl DD 1234H,12345678H:M7Ml为123456781234H

MM2 DD 432lH,8765432lH:NIM2为87654321432lH

SUM DD?,?

DATA ENDS

STACK SEGMENT PARA STACK’STACK’

DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DArA

MAIN PAR:主程序

BEGIN:PUSH DS

MOV AX,0

PUSH AX

MOV AX,D』uA

MOV DS,AX

MOV ES,AX

CALL ADD64;调用子程序ADD64

RET

MAIN ENDP

:子程序名称:ADD64

;子程序功能:两个64位数的相加

;输入参数:MUMl一被加数的地址

; NUM2一加数地址

:输出参数:SUM一和数地址

ADD64 PROC

PUSHF

PUSH AX:保护现场

PUSH BX

PUSH CX

LEA BX,Mmll:Bx指向被加数单元

MOV CX,4

CLC

AGAIN: MOV Ax,[Bx】;取被加数的相应字一Ax

ADc Ax,[Bx+8】;与加数相应字相加

MOV 【Bx+lOH】,Ax;保存和

INC BX

INC BX

LOOP AGAIN

POP Cx:恢复现场

POP BX

POP AX

POPF

RET

ADD64 ENDP

CODE ENDS

END BEGIN

四.编写程序,将一个十六位二进制数转换为ASCLL码,并以十进制数形式在屏幕上输出。(20分)

DATA SEGMENT

BINARY DW 0110110000001100B

BUF DW 9 DUP

DATA ENDS

STACKI SEGMENT PARA STACK ‘STACK’

DB 100H DUP

STACK ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA

START PROC FAR;

PUSH DS

MOV AX, 0

PUSH AX

MOV AX, DATA

MOV DS, AX

MOV CX, BINARY ;CX

CAALL CONV ;

CALL DISPLAY ;

RET

START ENDP

;子程序名称: CONV

;子程序功能:将CX中十六位二进制数转换为十进制数

;入口参数: CX

;调用子程序: CHANGE

CONV PROC NEAR

PUSH AX

PUSH BX

PUSH DX

PUSH SI

LEA BX, BUF

MOV AL , 0AH

MOV [BX] , AL ;

INC BX

MOV AL , CH;

OR AL , AL JNS PLUS ;

NEG CX ;

MOV AL ;’-’

MOV [BX] , AL ; JMP GOON PLUS: MOV AL , ‘+’

MOV [BX] , AL ; GOON: INC BX

MOV SI , 10000 ; CALL CHANGE

MOV SI , 1000 ; CALL CHANGE

MOV SI , 100;

CALL CHANGE

MOV SI, 10;

CALL CHANGE

MOV AL , CL ;

ADD AL , 30H

MOV [BX] , AL

INC BX

MOV AL , ‘$’; MOV [BX] , AL

POP SI

POP DX

POP BX

POP AX

RET

CONV ENDP

;子程序名称; CHANGE

;子程序功能; 统计CX中所包含权(在SI中)的个数;并把个数转换为ASCH码,存入缓冲区中;入口参数: CX

;调用子程序: CHANGE

CONV PROC NEAR

PUSH AX;

PUSH BX

PUSH DX

PUSH SI

LEA BX , BUF

MOV AL , 0DH

MOV [BX], AL;

INC BX

MOV AL, CH;

OR AL, AL

JNS PLUS;

NEG CX;

MOV AL, ‘-‘

MOV [BX], AL;

JMP GOON

PLUS: MOV AL, ‘+’

MOV [BX], AL;

CHANGE ENDP

;子程序名称:DISPLAY

;子程序功能:输出以$结尾的一个字符串

;调用子程序:系统09号功能

DISPLAY PROC NEAR

PUSH AX

MOV DX,OFFSET BUF

MOV AH,9

INT 21H

POP AX

RET

DISPLAY ENDP

CODE ENDS

END START

五.编写程序,将输入的大写字母转换为小写字母。(20分)

DATAS SEGMENT

a d

b "input",0dh,0ah,"$"

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

mov ax,DATAS

mov ds,ax

mov dx,offset a ;定义数据段

mov ah,9h

int 21h ;输出“input”,并且让下一位所要显示的显示在下一行

mov ah,1

int 21h ;输入

mov dl,al ;转存输入

sub dl,20h

mov ah,2

int 21h ;输出此时的DL中的数值(为ASCII码)

mov ax,4c00h

int 21h

CODES ENDS

END START

六.对两个整数变量A和B,编写程序完成下列功能:

1、若两个数中有一个是奇数,则将奇数送入A单元中,偶数送入B单元中。

2、若两个数均为奇数,则两个数分别加1,并存入原变量中。

3、若两个数均为偶数,则两变量不变。(20分)

dseg segment

a dw ?

b dw ?

dseg ends

cseg segment

main proc far

assume cs:cseg,ds:dseg

start: push ds

sub ax,ax

push ax

mov ax,dseg

mov ds,ax

begin: mov ax,a

mov bx,b

xor ax,bx

test ax,0001

jz class

test bx,0001

jz exit

xchg bx,a

mov b,bx

jmp exit class: test bx,0001

jz exit

inc b

inc a

exit: ret

main endp

cseg ends

end start

第三章 8086汇编语言程序格式

第三章8086汇编语言程序格式 练习题 3.4.1 单项选择题 1.下列选项中不能作为名字项的是()。 A.FH B.A3 C.3B D.FADC 2.下列指令不正确的是()。 A.MOV AL,123 B.MOV AL,123Q C.MOV AL,123D D.MOV AL,123H 3.下列指令不正确的是()。 A.MOV BL,OFFSET A B.LEA BX,A C.MOV BX,OFFSET A D.MOV BX,A 4.若定义“BUF DB 1,2,3,4”,执行MOV AL,TYPE BUF 后AL=()。 A.0 B.1 C.2 D.3 5.若定义“A EQU 100”,执行“MOV AX,A”后,AX=()。 A.A的偏移地址B.A单元中的内容 C.100 D.A的段地址 6.若定义“B DW 1,2,10 DUP(0)”,则该伪指令分配()字节单元。 A.10 B.20 C.22 D.24 7.若定义“C DD 2,4”,则该伪指令分配()个字节单元。 A.2 B.4 C.6 D.8 8、伪指令是()规定的汇编说明符,它在源程序汇编时进行说明。 A、DEBUG B、LINK C、MASM D、EDIT 9.在上机操作过程中,MASM命令执行后,除了生成一个目标文件外,根据选择还可以生成一个()文件。 A..LST B..EXE C..MAP D..ASM 10.LINK命令执行后可以生成一个以()为扩展名的文件。 A.ASM B.EXE C.OBJ D.COM 11.一个段最大可定义()字节。 A.1M B.64K C.32K D.16K 12.若要求一个段的起始位置能被256整除的单元开始,在定位方式选项中应选()。 A.BYTE B.WORD C.PARA D.PAGE 13.宏指令与子程序相比,在多次调用时,宏指令调用的目标程序长度比子程序调用的()。 A.相同B.长C.短D.不定 14.宏指令与子程序相比,子程序调用的执行速度比宏指令的()。 A.相同B.快C.慢D.不定 15.ASSUME伪指令说明了汇编程序所定义段与段寄存器的关系,它只影响()的设定。 A.源程序B.目标程序C.汇编程序D.连接程序

汇编语言试题及参考答案

汇编语言试题及参考答案 一,填空题 1.ZF标志位是标志结果是否为零的,若结果,ZF为( 1 ),否则ZF为( 0 ).当ZF为1时,SF为( 0 ) 2.标号可以有两种类型属性.它们是( )和( ) 3.8位无符号整数的表示范围为0--255,写成16进制形式为( ),8位有符号整数的表示范围为-128--+127,写成16进制形式为( ) 4.伪指令DB,GROUP 和NAME 三个标号名字域必须有名字的是( ),不得有名字的是( ),可有可无名字的是( ). 5.循环程序通常由( )( )( )和循环结果外理四部分构成 6.在数值不达式中,各种运算符可可混合使用,其优先次序规则*,/( )于+,-;XOR,OR( )于AND,LT( )于GT 7. 宏指令定义必须由伪指令( )开始,伪指令( )结束,两者之间的语句称为( ) 8.调用程序与子程序之间的参数传递方法有四种,即堆栈法( )( )( ) 9.分别用一条语句实现下述指明的功能 (1)栈顶内容弹出送字变量AYW( ) (2)双字变量AYD存放的地址指针送ES和SI( ) (3)变量AY2类型属性送AH( ) (4)不允许中断即关中断( ) (5)将字符串'HOW ARE YOU!'存入变量AYB( ) (6)子程序返回调用程序( ) (7)地址表达式AYY[4]的偏移地址送字变量ADDR( ) (8)AX的内容加1,要求不影响CF( ) (9)BX的内容加1,要求影响所有标志位( ) (10)若操作结果为零转向短号GOON( ) 二,单选题 1.IBM PC微机中,有符号数是用( )表示的 1.原码 2.补码 3.反码 4.BCD码 2.把汇编源程序变成代码程序的过程是( ) 1.编译 2.汇编 3.编辑 4.链接

汇编语言考试复习试题及答案

《汇编语言》考试复习题及答案 一、单项选择题(共20小题,每小题1分,共20分)在每题列出的四个备选项中只有一个是符合要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.CPU要访问的某一存储单元的实际地址称() A.段地址B.偏移地址 C.物理地址D.逻辑地址 2.某存储单元的物理地址是12345H,可以作为它的段地址有()A.2345H B.12345H C.12340H D.1234H 3.执行后使BX=0的同时也使CF=0,OF=0的指令是()A.XORBX,BX B.ORBX,BX C.ANDBX,BX D.CMPBX,BX 4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是()A.CX≠0且ZF=1B.CX≠0且ZF=0 C.CX≠0或ZF=1D.CX≠0或ZF=0 5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是() A.DAA校正指令的功能已自动加在AH中 B.进位值在AF中,校正后根据AF内容再加在AH中 C.进位值在CF中,校正后根据CF内容再加在AH中

D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是()A.指令XORAX,AX执行后,AX内容不变,但设置了标志位 B.指令ORDX,1000H执行后,将DX最高位置1,其余各位置0 C.指令ANDAX,OFH执行后,分离出AL低四位 D.NOTAX,执行后,将AX清0 7.在执行下列指令时,需要使用段寄存器DS的指令是()A.STOSW B.ADDAL,CL C.NEGBX D.INCDA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是() A.ADDBH,01H B.ORBH,01H C.XORBH,01H D.TESTBH,01H 9.完成对CL寄存器的内容乘以4的正确操作是() A.ROLCL,1B.MUL4 ROLCL,1 C.SHLCL,1D.MOVCL,2 SHLCL,1SHLCL,CL 10.下面各传送指令中,正确的是() A.MOV[DI],[SI]B.MOV[DX+DI],AL C.MOVWORDPTR[BX],0100H D.MOV AL,BX 11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法()

最新有答案---14-15-1-汇编语言复习资料

汇编语言复习资料 第一部分选择题 第一章基础知识 1.数组array在数据段的定义如下所示,在内存空间的存储值是什么,选出正确的一 项(B ) array db 1,‘1’,0AH,‘A’,-2 A、1H 1H 0AH 0AH 82h B、1H 31H 0AH 41H FEH C、1 1 0A 0A 12h D、31H 31H 41H 41H 02h 2.debug命令中显示内存单元内容的命令是( B ) A、a B、d C、e D、r 3.debug命令中反汇编命令是(D ) A、q B、g C、t D、u 4.在DEBUG下,修改寄存器AX的命令是___B_。 A.U AX B.R AX C.R D.A AX 5.从200H开始反汇编的DEBUG命令是A____。 A.U 200 B.R 200 C.D 200 D.U 6.仅查看用户程序中数据段10号存储单元的DEBUG命令是A____。 A.D DS:A A B.D DS:A C.D DS:10 10 D.D DS:10 7.计算机编程语言的发展顺序是(A ) A、机器语言汇编语言高级语言 B、汇编语言机器语言高级语言 C、高级语言汇编语言机器语言 D、高级语言机器语言汇编语言 8.将124转换成十六进制数的结果是_A____。 A.7CH B.7DH C.7EH D.7BH 9.计算机对字符、符号采用统一的二进制编码。其编码采用的是_C_____。 A.BCD码B.二进制码C.ASCII D.十六进制码 第二章80x86计算机组织 10.对汇编语言源程序进行翻译的程序是__B___。 A.连接程序B.汇编程序C.编译程序D.目标程序 11.在汇编语言中,能够翻译成二进制代码的指令是__A__。 A.汇编指令B.伪指令C.机器指令D.宏指令

扬州大学汇编语言课后习题

练习一 1.在计算机内部,计算机能够直接执行的程序语言是。 A.汇编语言 B。C++语言 C.机器语言 D。高级语言 2.在堆栈段中,存放栈顶地址的寄存器是。 A.IP B.SP C. BX D. BP 3.指令指针寄存器IP用来存放代码段中的偏移地址。在程序运行的过程中,它始终指向。A.下一条指令的首地址B.下一条指令的地址 C.当前指令的首地址D.当前指令的地址 4.编译程序的功能是。 A.检查源程序中的语法错误和逻辑错误 B.将源程序编译成目标程序 C.改正源程序中的语法错误 D.将高级语言源程序翻译成汇编语言源程序 5.用户为了解决自己的问题,用汇编语言所编写的程序,称为。 A.目标程序B.源程序C.可执行程序D.汇编程序 6.计算机中用来存储程序、数据等信息的记忆装置是。 A.控制器 B.运算器 C.CPU D.存储器 7.在宏汇编中,源程序必须通过___________生成目标代码,然后用连接程序将其转化为可执行文件, 该文件可在系统中运行。 8 当 SS =3000H,SP =0100H 时,执行 PUSH AX 指令后,堆栈顶部的物理地址 是() A.30100H B.30098H C.30102H D.300FEH 9 设B分别以原码、补码及反码表示时,则对应的十进制数依次是() A.-82、-126、-2 B.-2、-125、126 C.-2、-126、-125 D.-82、-125、125 10 若寄存器AX、BX、CX、DX的内容分别为18,19,20,21时,依次执行PUSH AX,PUSH BX,POP CX,POP DX后,寄存器CX的内容为__________________。 11 若物理地址为2D8C0H,偏移量为B6A0H,则段地址为 _________。 练习二 1. 8086在基址变址的寻址方式中,基址、变址寄存器分别是()。 A.AX或CX、BX或CX B.BX或BP、SI或DI C.SI或BX、DX或DI D.CX或DI、CX或SI 2. 设(SS)=338AH,(SP)=0450H,执行PUSH BX和PUSHF两条指令后,堆栈顶部的物理地址是()。A.33CECH B.33CF2H C.33CF4H D.33CE8H 3.设(AX)=0C544H,在执行指令ADD AH,AL后,相应的状态为()。 A.CF=0、OF=0 B.CF=0、OF=1 C.CF=1、OF=0 D.CF=1、OF=1 4.设DS=2000H,SS=1500H,(ES)=3000H,(SI)=00B0H,(BX)=1000H,(BP)=0020H,指出下列指令的源操作数的寻址方式是什么?若该操作数为存储器操作数,请计算其物理地址。 (1) MOV AX,DS:[0100H]

大工《汇编语言程序设计》大作业参考题目及要求【内容仅供参考】686

题目:题目五:信息检索系统 1.谈谈你对本课程学习过程中的心得体会与建议? 在接触这门课程初始,就感到汇编语言并不是很容易就可以弄懂的。相比较以前学过的程序语言如C、C++等,电脑等于在迁就人的思维方式,但汇编却是接近机器语言的一门语言,我们学习和编写程序时必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我学习汇编语言时感受最深的地方,想起来很简单,写起来相当的不易。汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。其中遇到很多新的概念,名字。如寄存器、中断、寻址方式等。这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解,自己亲手编程的方式也就渐渐清晰明了。我们在学习之前都需要明确什么是汇编语言。计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。 为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。经过一个学期的学习,我也慢慢摸出了汇编学习的规律。首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,最重要的是一些思考问题,实现功能的逻辑的思考,会帮助我们很快的找到编写程序的思路和方向。例如C语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF...THEN...ELSE...),循环结构(FOR...NEXT)三种结构,也通过C语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。第二,学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。指令的种类十分繁杂,但其格式却是统一的。其中方括号中的内容为可

汇编语言复习题(附答案)

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课 后四、六章的答案,大家抓紧时间复习哦! 一、选择题 1. 把要执行的程序与库文件连接起来形成可执行文件的系统程序是(B )。 A. 汇编程序 B. 连接程序 C. 机器语言程序 D.源代码程序 2. 在8088/8086的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是 (C )。 A..SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 3. 为了使主机访问外设方便起见,外设中的每个寄存器给予一个(C )。 A.物理地址 B. 逻辑地址 C. 端口地址 D. 段地址 4. MOV AX, 3064H,该指令中源操作数采用的寻址方式是(A )。 A.立即 B. 直接 C. 寄存器相对 D. 寄存器间接 5. 换码指令的助记符是(C )。 A. XCHG B. LEAS C.XLAT D. MOV 6. 如果A> B (A、B有符号数)发生转移,应选择的条件转移指令是(JGE )。 7. 下列符号中,可用作标识符的是(C )。 A.MOV B.AX C.MSG1 D.1ABC 8. X DB 10H DUP (1 , 2)内存变量定义语句拥有了( A )个字节的存储空间。 A.20D B.10D C.20H D.10H 9. 当DF=0时,执行串操作指令MOVSB变址寄存器SI、DI的值将(C )。 A.不变 B. 减1 C. 加1 D. 无法确定 10. 如下指令可将AX寄存器内容改变的是(A )。 A. AND AX , BX B . TEST AX , BX C. CMP AX , BX D . XCHG AX , AX 11.16位CPU支持的I/O 地址范围是(D )。 A. 0~0FFFFFH B. 0~0FFFFH C. 0~0FFFH D. 0~0FFH 12. MUL CL指令实现的功能是(A )。 A.无符号乘法:AX AL X CL B.有符号乘法:AX AL X CL C.无符号乘法:DX AL X CL D .有符号乘法:DX AL X CL 13. DOS系统功能调用(INT 21H )中,显示字符串的功能号是(D )。 A.01H B.02H C.08H D. 09H 14. 在16位CPU读取指令时,需要用到的寄存器对是(C )。 A.SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 15. 下列指令中,源操作数(既第2操作数)属于基址加变址寻址方式是(B )。 A.MOV AX,23H B. MOV AX,[BX+SI] C.SUB AX,[BX] D. ADD AX,BX 16. 有内存变量定义语句:VAR DW 10 DUP(1 , 2), 1234H, VAR的属性TYPE LENGTH和

汇编语言复习题 (2)

汇编语言复习题 第2章8086CPU寄存器的结构及使用 1.8086CPU由指令执行部件EU和总线接口部件BIU两部分组成。其中EU的功能是控制和执行指令,主要由算术逻辑部件ALU、EU控制部件、8个16位寄存器和一个标志寄存器FLAGS组成。BIU的功能是从存储器预取指令和数据,以及所有EU需要的总线操作,实现CPU与存储器和外设间信息传递。BIU由指令队列、指令指针寄存器、段寄存器、地址加器组成。 2.Intel8086CPU共有14个16位寄存器,它们分别是通用寄存器8个即AX、BX、CX、DX、SP、BP、SI、DI,其中能用作寄存器间接寻址的寄存有BX、BP、SI和DI,控制寄存器2个即IP、PSW,段寄存器4个即DS、SS、CS和ES它们的含义分别是: 其中在编程过程中程序的段基值由汇编程序装入的段寄存器是SS和CS,由编程者用汇编指令将段基值装入的段寄存器是DS和ES,其具体指令是MOV AX,数据段段/附加数据段名,MOV DS/ES,AX,编程人员不能用指令去取其值或给其设置给定值的寄存器是IP,但是可以通过某些指令的执行而自动修改其内容,如JMP NEXT指令的功能是将目的地址的偏移量送入IP。 3.PSW是程序状态字寄存器又称为标志寄存器,用来反映微处理器在程序运行时的某些状态,其中的6个状态标志位分别是OF、SF、ZF、AF、PF和CF,反映了刚执行完算术或逻辑运算指令后的某些特征。三个控制标志位是DF即方向标志、IF即中断标志位和TF陷阱标志。如两个8位的二进制数相加其状态标志位中各标志的值是多少?10110101+10011011。 4.8086CPU数据总线16根地址总线是20根能访问的最大存储空间是1MB。 第3章存储器的分段 1.在8086CPU中存储器的编址原则是按字节编址即每一个字节单元是一个存储器地址,在源程序中用常用十六进制数或符号来表示一个存储单元的地址。任何相邻的两个字节地址可以构成一个字地址,约定用较小的那个地址来表示字地址。程序员在编程时所用的地址称为逻辑地址,CPU访问的地址称为物理地址。物理地址与逻辑地址的关系是:物理地址=段基值*16+偏移地址。如有下列存储器的结构请按要求回答问题: ①0002H的字节地址的内容是多少? ②0002H的字地址的内容是多少? ③若该存储地址所在的数据段的段基值是0F3BH,则逻辑地址 为0004H的物理地址是多少?该物理地址的字单元内容是多少? ④物理地址是0F3B1H的字节单元内容是多少?

完整版汇编语言试题及答案..doc

一,单项选择题 (每小题 1 分,共 20 分 1-10CCCCAADACB 11-20.ADBBAADDCC 1.指令 JMP FAR PTR DONE 属于 ( C A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 2.下列叙述正确的是 ( A.对两个无符号数进行比较采用CMP 指令 ,对两个有符号数比较用CMP S 指令 B.对两个无符号数进行比较采用CMPS 指令 ,对两个有符号数比较用CM P 指令 C.对无符号数条件转移采用JAE/JNB 指令 ,对有符号数条件转移用JGE/J NL 指令 D.对无符号数条件转移采用JGE/JNL 指令 ,对有符号数条件转移用JAE/J NB 指令 3.一个有 128 个字的数据区 ,它的起始地址为 12ABH:00ABH, 请给出这个数据区最末一个字单元的物理地址是 ( A.12CSBH B.12B6BH

C.12C59H D.12BFEH 4.在下列指令的表示中 ,不正确的是 ( A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL 5.在进行二重循环程序设计时,下列描述正确的是 ( A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内 B.外循环初值应置外循环之内;内循环初值应置内循环之内 C.内、外循环初值都应置外循环之外 D.内、外循环初值都应置内循环之外,外循环之内 6.条件转移指令 JNE 的测试条件为 ( A.ZF=0 B.CF=0 C.ZF=1 D.CF=1 7.8086CPU在基址加变址的寻址方式中,变址寄存器可以为 ( A.BX 或 CX

汇编语言复习资料

汇编语言程序设计复习提纲 一、单项选择题 1.指令指针寄存器是()。 2. DAL DB 67H NUM EQU 80H 则执行AND DAL,NUM语句后DAL中的内容是()。 A. E7H B. 80H C. 67H D. 0 3.与指令MOV AX,NOT 0F0H等效的汇编语言指令是()。 A. MOV AX,0FH B. MOV AX,0FF0FH C. MOV AX,000FH D. MOV AX,0F0H 4.一个有16个字的数据区,它的起始地址是70A0H:DDF6H,则这个数据区最末一个字单元的物理地址是()。 B 5.可用作基址变址寻址或寄存器间接寻址的寄存器是()。 ,BX,CX,DX ,ES,CS,SS ,BP,IP,BX ,DI,BP,BX D 6.在串操作指令中,下列描述中不正确的是()。 MOVSB STOSB CMPSB LODSB D 7. ORG 0030H

DA1 DB 0 , ‘0’, 30H 偏移地址为0030H字存储单元的内容是()。 A 8.编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令是()。 A. CMP D 9.将汇编语言源程序翻译成机器码程序的程序是()。 A.编译程序 B.汇编程序 C.解释程序 D.目标程序 B 10.设DS=1E4AH,偏移地址为0056H,该字节的物理地址为()。 A. 1E4A6H B. 1E456H C. 1E556H D. 1E4F6H D 11.当程序顺序执行时,每取一条指令语句,IP指针增加的值是() A.由指令长度决定的字节数 A 12.若AX=349DH, CX=0FH。则执行指令 AND AX,CX后,AX的值是()。

汇编语言试题及答案.

一,单项选择题(每小题1分,共20分 1-10CCCCAADACB 11-20.ADBBAADDCC 1.指令JMP FAR PTR DONE属于( C A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 2.下列叙述正确的是( A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMP S指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CM P指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/J NL指令 D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/J NB指令 3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是( A.12CSBH B.12B6BH

C.12C59H D.12BFEH 4.在下列指令的表示中,不正确的是( A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL 5.在进行二重循环程序设计时,下列描述正确的是( A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内 B.外循环初值应置外循环之内;内循环初值应置内循环之内 C.内、外循环初值都应置外循环之外 D.内、外循环初值都应置内循环之外,外循环之内 6.条件转移指令JNE的测试条件为( 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 8.已知BX=2000H,SI=1234H,则指令MOV AX,[BX+SI+2]的源操作在(中。 A.数据段中偏移量为3236H的字节 B.附加段中偏移量为3234H的字节 C.数据段中偏移量为3234H的字节 D.附加段中偏移量为3236H的字节 9.执行如下程序:( MOV AX,0 MOV AX,0 MOV BX,1 MOV CX,100 A:ADD AX,BX INC BX LOOP A HLT 执行后(BX=( A.99

华中科技大学 80X86汇编语言程序设计试卷

《汇编语言程序设计》网络学院模拟试卷一2004.4班级________________ 姓名______________ 学号______________ 成绩______ 一、改错题(10分,每题1分,在错误处划线,线下写上正确答案) 1. SHR BH, 8 2. ADD [BX], –15 3. LEA POINT, BUF 4. IN DX, 200 5. PUSH DH 6. MUL 25 7. XLAT BX, TAB 8. REPNZ MOVSW 9. MOV AX, 2[SI][DI] 10. MOV [BX], [SI] 二、单选题(20分,每题1分) 1.MOV指令的特点是________。 A.影响DF B.影响SF C.影响CF D.不影响标志位2.使用寄存器间接寻址方式访问堆栈中某变量时,要选用________寄存器。 A.BX B.BP C.SI D.SP 3.8086标志寄存器中的三个控制标志是________。 A. IF、PF、SF B.DF、OF、CF C.DF、IF、TF D.TF、AF、IF 4.若有符号数运算的结果溢出,则置________为1。 A.OF B.CF C.SF D.IF 5.若某存贮器操作数的偏移地址在SI中,访问该操作数应采用________寻址方式。 A.立即B.寄存器C.寄存器问址D.直接 6.串操作指令中,目的串的逻辑地址应为________。 A.DS:[SI] B.DS:[DI] C.ES:[DI] D.ES:[SI] 7.不在本模块定义而在本模块中引用的符号称________符号。 A.公共B.局部C.自定义D.外部 8.若(CL)= 4,(AX)=0FF0FH,执行语句“ROR AX,CL”后,(AX)=________。 A.0FFFFH B.0FFF0H C.0F0FFH D.0FFFH 9.已知AL中存放着一个压缩BCD码,为实现AL减1操作,应选用________指令序列。 A.DEC AL B.SBB AL,0 C.SUB AL,1 D.SUB AL,1 AAS DAS AAS DAS 10.要将BL中的8位数据送到1234H端口号的外部设备中去,应选用________指令序列。 A.OUT 1234H,BL B.MOV DX,1234H OUT DX,BL C.MOV AL,BL D.MOV DX,1234H MOV DX,1234H MOV AL,BL OUT DX,AL OUT AL,DX 11.已知AX,BX中均为有符号 ...数据,当进行字.除法时,应采用________指令序列。 A.XOR DX,DX B.CBW C.IDIV BX D.CWD DIV BX IDIV BX IDIV BX

汇编语言设计复习题

一、选择题 1. 应用程序具有3个基本段,可执行指令应该保存于( A )。 A) 代码段B) 数据段C) 堆栈段D) 附加段 2. 8位补码F3H要扩展成16位补码应该是( D ),这样其真值才不变。 A) F0F3H B) 00F3H C) 10F3H D) FFF3H 3. “mov [ebx+8],eax”指令的目的操作数采用( C )寻址方式。 A) 存储器间接B) 寄存器C) 寄存器相对D) 立即数 4. 执行“sar ebx,1”指令后,ebx最高D31位一定等于( D ) A) 0 B) 1 C) D0位D) D30位 5. 在代码段内的-128~127个字节前后范围的跳转,可以用( C )类型名表示。 A) WORD B) DWORD C) SHORT D) FAR 6. 在Windows控制台环境,在当前光标显示信息应该使用( B )函数(功能)。 A) ReadConsole B) WriteConsole C) MessageBox D) GetStdHandle 7.汇编语言源程序经汇编后不能直接生成( C ) A) OBJ文件B) LST文件C) EXE文件D) CRF文件 8.在ADD指令中,两个操作数的物理位置不可以安排在( A )中。 A) 两个主存储单元 B) 一个主存储单元和一个数据寄存器 C) 两个数据寄存器 D) 一个堆栈单元和一个数据寄存器

9.假定ax=6987h,执行指令cmp ax,0eb30h后,则标志位CF和OF的状态( C )。 A)0,0 B) 0,1 C) 1,0 D) 1,1 10.假定esp=00120100h,eax=1f6c2107h,执行指令push ax后,存放数据07h的物理地址是( C )。 A) 00120104h B) 00120101h C) 001200fch D) 001200ffh 11.下列对标志寄存器中标志位产生影响的指令是( B ) A) jmp done B) shl eax, 2 C) call subp D) not eax 12. 假设CL=98H, 执行“MOVSX DX, CL”后,DX=( D ) A) F098H B) 0098H C) 1098H D) FF98H 13. “mov 80h[esi], eax”指令的目的操作数采用( C )寻址方式。 A) 存储器间接B) 寄存器C) 寄存器相对D) 变址寻址 14. 要在程序中定义缓冲区BUF,保留9个字节存储空间的语句是(C )。 A) BUF DW 9 B) BUF DB 9 C) BUF DB 9 DUP (?) D) BUF DW 9 DUP (?) 15. 下列指令执行后总是使CF=0,OF=0的是( A )。 A) AND B) NEG C) MOV D) INC 16. 下面指令的表示中,错误的操作是( C ) A) mov eax,[ebx+esi] B) jmp near ptr don1 C) dec [ebx] D) mul cx

汇编语言试题及答案

一,单项选择题(每小题1分,共20分) 1.指令JMP FAR PTR DONE属于() A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 2.下列叙述正确的是() A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS 指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP 指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JN L指令 D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JN B指令 3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是() A.12C5BH B.12B6BH C.12C5AH D.12BFEH 4.在下列指令的表示中,不正确的是() A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL 5.在进行二重循环程序设计时,下列描述正确的是() A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内B.外循环初值应置外循环之内;内循环初值应置内循环之内 C.内、外循环初值都应置外循环之外 D.内、外循环初值都应置内循环之外,外循环之内 6.条件转移指令JNE的测试条件为() 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 8.已知BX=2000H,SI=1234H,则指令MOV AX,[BX+SI+2]的源操作在()中。 A.数据段中偏移量为3236H的字节 B.附加段中偏移量为3234H的字节 C.数据段中偏移量为3234H的字节 D.附加段中偏移量为3236H的字节 9.执行如下程序:()

华南师范大学汇编语言试卷

一、填空题:(每小题2分,共10分) 1.数-27的补码表示是__11100101____(8位),扩展到16位为__1111111111100101_。 2.一个字5678H存到地址[1234H]单元中,则56H存放在 1235H 单元,78H存放 在 1234H 单元。 3.堆栈的栈顶由堆栈指针寄存器指出,非栈顶字由基址指针寄存器指出。 4.编程用的操作数有立即数、寄存器操作数、内存操作数。 5.中断向量是中断子程序的入口,中断向量表是计算机中断服务程序中的一个向量表,它纪录着全部的中断向量 二、改错题(每小题2分,共20分) (在不改变原题意的前提下,在试卷上画出每小题的错误之处,并在右边予以改正。) 1.MOV CX,SEG DATA MOV ES,CX MOV DS,ES MOV DS,CX 2.B DW 100 MOV AL,B MOV AX,B 3.MOV DI,30H MOV [DI],16H MOV WORD PTR [DI],16H 4.MOV AX,BX, IN AX,BX IN AX,DX 5.ADD SI,BX ADD AL,BL DAA

SUB [DX],CX SUB WORD PTR [DX],CX 7. PUSH AL PUSH AX 8. MOV BX,16 MOV AL,256 MOV AX,256 9. INC AX,1 INC AX 10. ADD 80H,AL ADD AL,80H IN 80H,AL IN AL,80H 三、阅读程序(根据题目要求写出结果每小题6分,共30分)(可以给指令另加注释,也可以不加。) 1.下面程序的功能是什么? MOV AX,X CMP AX,Y JGE LAB XCHG AX,Y LAB:MOV X,AX 选择X,Y中的较大值存入X中 2. 执行下列指令后AX、BX寄存器的内容? MOV SI,10H

汇编语言学习笔记

汇编语言学习笔记 《汇编语言》--王爽 前言 学习汇编目的:充分获得底层编程体验;深刻理解机器运行程序的机理。 原则:没有通过监测点不要向下学习;没有完成当前实验不要向下学习。 第一章基础知识 有三类指令组成汇编语言:汇编指令;伪指令;其他符号。8bit = 1byte = 一个存储单元有n根地址线,则可以寻址2的n次方个内存单元。 1.1节--1.10节小结 (1)汇编指令是机器指令的助记符,同机器指令一一对应。 (2)每一种cpu都有自己的汇编指令集。 (3)cpu可以直接使用的信息在存储器中存放。 (4)在存储器中指令和数据没有任何区别,都是二进制信息。 (5)存储单元从零开始顺序编号。 (6)一个存储单元可以存储8个bit,即八位二进制数。 (7)每一个cpu芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个cpu可以引出的三种总线的宽度标志了这个cpu不同方面的性能。地址总线的宽度决定了cpu的寻址能力;数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了cpu对系统中其他器件的控制能力。 监测点:1KB的存储器有1024个存储单元?存储单元的编号从0到1023. 内存地址空间: 最终运行程序的是cpu,我们用汇编编程时,必须要从cpu的角度思考问题。对cpu来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受cpu 寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。 第二章寄存器(cpu的工作原理) mov ax, 2 add ax, ax add ax, ax add ax, ax (1)cpu中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址; (2)段地址和偏移地址通过内部总线送人一个称为地址加法器的部件; (3)地址加法器将两个16位地址合成为一个20位的物理地址; (4)地址加法器通过内部总线将20位物理地址送人输入输出控制电路; (5)输入输出控制电路将20位物理地址送上地址总线; (6)20位物理地址被地址总线传送到存储器;

汇编语言2008秋季期末考试复习题及参考答案

汇编语言2008秋季期末考试复习题及参考答案 一、填空 1. 十进制数369转换成二进制数为()2,转换成十六进制数为()16. 2. 计算机中的指令由()和(地址码)两部分组成。 3. 8086的地址总线有20根,寻址范围为()字节。 4. 下一条将要执行的指令的地址存放在寄存器()中。 5. 写出IBM PC机的三种子程序返回的指令(RET), (IRET),(IRETD)。 6. 汇编语言源程序需经过()程序汇编,()程序连接才能生成可执行文件。 7. 存储器某单元的地址表示为2314H:4132H,则它的偏移地址=(4132),物理地址=() 8. REP指令前缀与()指令配合使用。 9. 在显示器上查看和修改内存单元的内容可以使用DEBUG的()和()命令。 10. (AL)=BFH,要求屏蔽第0,1两位,则要执行指令();如果要求第0,1位变反,可使用指令() 11. 宏汇编适合于(),()的子功能段使用; 二、选择题 1. 设字长N=16,有符号数7AE9H的补码表示为( ) A.9EA7H B. 76C4H C. 8417H D. 7AE9H 2. 比较有符号数3260H与0B425H的大小关系为( ) A. 相等 B. 小于 C. 大于 D. 不能比较 3. 指令JMP WORD PTR [BX][DI]中转移的目标地址为( ) A.16 d x(DS)+(BX)+(DI)B.16d x(ES)+(BX)+(DI) C.16d x(SS)+(BX)+(DI)D.16d x(CS)+(BX)+(DI) 4. 在指令MOV AX,[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,DT B. DB,DW,DD C. DB, DW D. DB; 8. 若(AL)=87H,执行ADD AL,0F5H后,S,Z,C,O,P的状态为( ) A.SF=0,ZF=0,CF=1,OF=1,PF=0 B.SF=1,ZF=0,CF=1,OF=0,PF=1 C.SF=0,ZF=0,CF=0,OF=1,PF=0 D.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说明为远过程。

X86汇编语言学习

X86汇编语言学习手记 X86汇编语言学习手记(1) 1. 编译环境 OS: Solaris 9 X86 Compiler: gcc 3.3.2 Linker: Solaris Link Editors 5.x Debug Tool: mdb Editor: vi 注:关于编译环境的安装和设置,可以参考文章:Solaris 上的开发环境安装及设置。 mdb是Solaris提供的kernel debug工具,这里用它做反汇编和汇编语言调试工具。 如果在Linux平台可以用gdb进行反汇编和调试。 2. 最简C代码分析 为简化问题,来分析一下最简的c代码生成的汇编代码: # vi test1.c int main() { return 0; } 编译该程序,产生二进制文件: # gcc test1.c -o test1 # file test1 test1: ELF 32-bit LSB executable 80386 Version 1, dynamically linked, not stripped test1是一个ELF格式32位小端(Little Endian)的可执行文件,动态链接并且符号表没有去除。 这正是Unix/Linux平台典型的可执行文件格式。 用mdb反汇编可以观察生成的汇编代码: # mdb test1 Loading modules: [ libc.so.1 ]

> main::dis ; 反汇编main函数,mdb的命令一般格式为<地址>::dis main: pushl %ebp ; ebp寄存器内容压栈,即保存main函数的上级调用函数的栈基地址 main+1: movl %esp,%ebp ; esp值赋给ebp,设置main函数的栈基址main+3: subl $8,%esp main+6: andl $0xf0,%esp main+9: movl $0,%eax main+0xe: subl %eax,%esp main+0x10: movl $0,%eax ; 设置函数返回值0 main+0x15: leave ; 将ebp值赋给esp,pop先前栈内的上级函数栈的基地址给ebp,恢复原栈基址 main+0x16: ret ; main函数返回,回到上级调用 > 注:这里得到的汇编语言语法格式与Intel的手册有很大不同,Unix/Linux采用AT&T 汇编格式作为汇编语言的语法格式 如果想了解AT&T汇编可以参考文章:Linux AT&T 汇编语言开发指南问题:谁调用了main函数? 在C语言的层面来看,main函数是一个程序的起始入口点,而实际上,ELF可执行文件的入口点并不是main而是_start。 mdb也可以反汇编_start: > _start::dis ;从_start 的地址开始反汇编 _start: pushl $0 _start+2: pushl $0 _start+4: movl %esp,%ebp _start+6: pushl %edx _start+7: movl $0x80504b0,%eax _start+0xc: testl %eax,%eax _start+0xe: je +0xf <_start+0x1d> _start+0x10: pushl $0x80504b0 _start+0x15: call -0x75 _start+0x1a: addl $4,%esp _start+0x1d: movl $0x8060710,%eax _start+0x22: testl %eax,%eax _start+0x24: je +7 <_start+0x2b> _start+0x26: call -0x86 _start+0x2b: pushl $0x80506cd _start+0x30: call -0x90 _start+0x35: movl +8(%ebp),%eax _start+0x38: leal +0x10(%ebp,%eax,4),%edx _start+0x3c: movl %edx,0x8060804

相关文档
最新文档