汇编语言的综合练习1

汇编语言的综合练习1
汇编语言的综合练习1

一.单项选择题(每小题1分,共20分)

1. 设有无符号数X=1101011B, Y=101Q, Z=6EH, 它们之间的关系是( )

(1) X>Y>Z (2) XX>Z (4)Z>X>Y

2. 在Intel8086/8088CPU中提高执行速度的主要措施是( )

(1)采用了段寄存器(2)采用了通用寄存器

(3)采用了独立的EU和BIU结构(4)采用了总线结构

3. 在指令MOV AX, 100[BX][SI]中, 在形成源操作数地址时使用的段寄存器是( )

(1) CS (2)DS (3)SS (4)ES

4. 已知(AL)=56H , (BH)=60H

ADD AL, BH

DAA

执行上述两条指令后,结果是( )

(1)B6H (2)16 (3)16H (4)116

5. 循环控制指令LOOPNZ结束循环的条件是( )

(1) (CX)=0 OR ZF=1 (2) (CX)≠0 AND ZF=0

(3) (CX)=0 AND ZF=0 (4) (CX)≠0 OR ZF=1

6. 对于串传送指令MOVSB ,下列说法正确的是( )

(1)源操作数来自AL/AX, 目的操作数来自DS:[DI]

(2)源操作数来自DS:[SI], 目的操作数来自DS:[DI]

(3)源操作数来自DS:[SI], 目的操作数来自ES:[DI]

(4)源操作数来自DS:[SI], 目的操作数来自AL/AX

7. 下列语句有语法错误的是( )

(1) MOV BX, [SI] (2) LES SI, [BX]

(3) MOV [BX], BX (4) MOV AL, OFFSET [SI+2]

8. 执行串操作指令时串地址按增量方向处理,应使用的指令是( ).

(1) STD (2) STI (3)STC (4) CLD

9. 当两个数60和70按照8位二进制数相加后,标志位CF和OF的值是( ).

(1) CF=1 OF =1 (2) CF=0 OF =1 (3)CF=0 OF =0 (4) CF =1 OF =0

10. 汇编语言源程序被汇编后产生的文件的扩展名是( ).

(1) .EXE (2) .COM (3) .OBJ (4) .ASM

11. 算术左移指令SAL 和逻辑左移指令SHL两条指令执行效果完全相同的条件是( )

(1) 只能是目的操作数为正数(2) 只能是目的操作数为负数

(3) 无论什么情况都不可能有相同效果(4) 任何情况下都是相同的效果

12. 用一条指令实现(BX)+(SI)=>CX的方法是().

(1)MOV CX, [BX][SI] (2) XCHG CX, [BX][SI]

(3) LDS CX, [BX][SI] (4)LEA CX, [BX][SI]

13. 带符号数条件转移指令JG发生转移的条件是( )

(1) SF=OF OR ZF=0 (2) SF≠OF AND ZF=0

(3) SF=OF AND ZF=0 (4)SF≠OF OR ZF=1

14. 一个逻辑段的段基址一定是( )

(1) 一个页面的首地址(2)一个奇数地址

(3)一个小节的首地址(4)任意一个地址

15. 设堆栈初始化时(SS)=3100H,(SP)=40H,则堆栈底部字单元地址是( ).

(1) 31040H (2)31038H (3) 3103EH (4) 31042H

16. 设(AX)=0FFFFH,若要使(AX)=0AAAAH,应选用的指令是( ).

(1) AND AX,0AAAAH (2) OR AX,0AAAAH

(3) XOR AX,0AAAAH (4) XOR AX,505H

17. ORG 30H

DA DB 0,’1’,’0’,30H,0,30H

DW DA

上述数据定义语句中,构成数据3000H的字存储单元的个数是()

(1) 1个(2) 3个(3) 4个(4) 2个

18. 设三个字节存储单元的地址和内容分别为:(20020H)=32H,(20021H)=2,(20022H)=0F3H。从地址20021H中取一个字的内容是()。

(1)2032H (2)3202H (3)0F302 (4)02F3H

19.ABC DW 10 DUP(1,2, 3DUP(10,0))

上述伪指令汇编后,为变量ABC数据区分配的存储单元字节数是()(1)50H (2)0A0H (3) 30 (4)60

20.使AH内容为奇数的指令是()。

(1)TEST AH, 1 (2)XOR AH, 1 (3)AND AH, 1 (4)OR AH, 1

二. 多项选择题(在每小题的四个备选答案中,选出1-4个正确的答案,将其号码添入括号中。每小题2分,共10分).

1. 下列寄存器组中属于通用寄存器的是( ).

(1)IP,SP (2)CS,DS,SS,ES (3)AX,BX,CX,DX (4)BP,SI,DI,SP

2. Intel8086/8088指令在存储器中寻找操作数时可用的寻址方式有( ).

(1)寄存器寻址(2)寄存器间接寻址(3)直接寻址(4)基址变址寻址

3. 对段寄存器CS的装入方式有( ).

(1)使用MOV指令(2) 使用段间转移指令(3)使用段间子程序调用指令

(4)使用END伪指令

4.设数据段的定义为:

DATA SEGMENT

ORG 0213H

DA1 DB 15H, 34H, 55H

ADR DW DA1

DATA ENDS

能使AX中数据为偶数的语句是( ).

(1) MOV AX, WORD PTR DA1+2 (2) MOV AX, WORD PTR DA1

(3) M OV AX, WORD PTR DA1[1] (4) MOV AL, BYTE PTR ADR[1]

5. 为在一连续存储单元中依次存放数据41H,42H,……48H, 可用的数据定义语句是( ).

(1)D B ’ABCDEFGH’

(2)D W ’AB’,’CD’

(3)D B 41H, 42H, 43H, 44H, 45H, 46H,47H, 48H

(4)D W 4142H, 4344H, 4546H, 4748H

三.填空题(每空1分,共13分)

1. 设数据段某字存储单元DA1的物理地址为35761H, 内容为80H, 段寄存器

(DS)=3120H。则OFFSET DA1= ,SEG(DA1+2)= 。

4.循环控制指令LOOP的转移范围为。

5.指令MOV AX,100[BX]在取源操作数时隐含使用的段寄存器为。

6.设某存储单元物理地址为21345H,它对应的逻辑地址是2020H:或:1235H。

7.在汇编语言中定义的变量所具有的三个属性是、和。

四.简答题(每小题4分,共12分)

1.在8086/8088汇编语言程序设计中有几种返回DOS操作系统的方法?试简述它们的实现方法。

2.下面是一个程序段,设(AX)=12C4H, 写出其执行过程中,各条指令执行后指定的各标志位的值。

SF ZF CF

AND AX, 00FFH

MOV AH,AL

RCL AX, 1

SBB AH,AL

3.下列指令是否有语法错误,如有错,请指出是什么错误。

(1)MOV AX,10[BX][BP]

(2)SAL DH,2

(3)XCHG [SI],10[DI]

(4)MOV CS, AX

五.读程序题(每小题5分,共25分)

1.设(BX)=0C49CH, (CX)=0F002H

ROL BX, CL

XOR BH, CH

RCR BX, CL

上述指令序列执行后,(BX)= ,CF=

2.已经(AX)=0B44H, (CX)=0304H

A ND AL, CH

SHL AX, CL

XOR AL, CH

NOT AH

上述几条指令执行后,(AX)= .

3. DATA SEGMENT

ORG 20H

DA1 DW 4321H,8765H,9ABCH

DA2 DW DA1+3

DATA ENDS

……

……

MOV CH, BYTE PTR DA1

MOV CL, BYTE PTR DA1+5

LEA AX, DA2

MOV DA1+2,CX

XCHG DA1, AX

MOV DA1+3, AX

上述程序段运行后,DA1开始的三个字单元内容分别是,DA2字单元内容是。

4.DATA SEGMENT

DA1 DB 27H

DA2 DB 8 DUP(?)

DATA ENDS

……

MOV CX,8

MOV SI,0

MOV BH, DA1

XYZ: MOV BL,BH

ROR BH, 1

AND BL,1

OR BL, 30H

MOV DA2[SI],BL

INC SI

LOOP XYZ

上述程序段执行后,从DA2开始的各字节单元内容是多少?该程序段完成什么功能?

5.MOV AX, 1234H

ADD AL, AH

DAA

XCHG AL, AH

SUB AL, AH

AAS

上述程序段运行后,(AX)= ,CF= 。

六.编制程序题(共20分)

1.(5分)试编写一程序段,统计寄存器AX内容用二进制数表示时字符“1”的个数。结果保存在寄存器CL中。

2.(5分)试编写一程序段,如果寄存器BX内容为负数则将AX内容变为奇数,否则变为偶数。要求改变后的AX内容大于等于原内容。

3.(10分)试编制一完整源程序,将一个字符串(只包含有字母和数字符)中的小写字母转换为大写,数字符转换成其对应的二进制值。各字符转换后的内容仍然存放在原来的单元中。已知A的ASCII码为41H,a的ASCII码为61H。

DATA SEGMENT

STRING DB ’BTe3F5…….’

DATA ENDS

一.1 (4)2(3)3(2)4(3) 5(1) 6(3) 7(4) 8(4) 9(2) 10(3) 11(4) 12(4) 13(3) 14(3) 15(3) 16(1) 17(1) 18(3) 19(2) 20(4)

二.1(3)(4) 2(2)(3)(4) 3(2)(3)(4) 4(3)(4) 5(1)(3)

三.1. 4561H,3120H

2.SI,DI BX,BP

3.AX,DX

4.-128~+127字节

5.DS

6.1145H, 2011H

7.段属性,偏移量属性,类型属性

四.2.0,0,0

0,0,0

1,0,1

0,1,0

3.(1)源操作数的寻址方式中,同时使用了两个基址寄存器

(2)移位次数超过1时,必须使用CL作移位次数

(3)指令XCHG的两个操作数不能同时为存储单元

(4)段寄存器CS不能做目的操作数

五.1. 0B89CH , 1

2. 4F03H

3. 26H,219AH,9A43H,23H

4. 31H,31H,31H,30H,30H,31H,30H,30H 功能为将用二进制数表示的DA1字节单元内容,从最低位开始,每一位转换为其对应的ASCII码,并存入从DA2开始的8个字节单元中。

5. 4506H, 1

六.1. ……

XOR BL,BL

MOV CX, 16

LOP:TEST AX, AX

JZ EXIT

JNS NEXT

INC BL

NEXT:SHL AX,1

LOOP LOP

EXIT:MOV CL,BL

……

JIXU:

MOV BX,AX

MOV CL,0

MOV CH,1

ADD BX,1

ADD CL,BL

SHL AX,1

CMP CH,16

JNE JIXU

2. ……

AND AX, AX

JS NEXT

MOV CX, AX

AND CX, 1

ADD AX,CX

JMP EXT

NEXT:OR AX,1

EXT: ……

试编写一程序段,如果寄存器BX内容为负数则将AX内容变为奇数,否则变为偶数。要求改变后的AX内容大于等于原内容。

3. DATA SEGMENT

STRING DB ’BTe3F5…….’

LEN EQU $-STRING

DATA ENDS

STACK1 SEGMET STACK

DW 20H DUP(0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE, SS: STACK1,DS:DATA

START: MOV AX, DATA

MOV DS, AX

LEA SI, STRING

MOV CX, LEN

LOP: MOV AL, [SI]

CMP AL,40H

JNC ALPH

AND AL,0FH

JMP STORE ALPH: CMP AL, 61H

JC EXT

SUB AL, 20H STORE: MOV [SI], AL EXT: INC SI

LOOP LOP

MOV AH, 4CH

INT 21H CODE ENDS

END START

汇编语言 快速入门

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%&“醒醒!” 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指

汇编语言试题及参考答案

汇编语言试题及参考答案 一,填空题 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.链接

汇编语言习题1

单选 1、下列寄存器组中,在访问存储器操作数地址时,可以提供偏移地址的是() A.BP、BX、SI、DI B.AX、BX、CX、DX C.SP、IP D.BX、SI、DI、DS 2、当堆栈为空时,如SS=0805H,SP=40H,栈底字单元的物理地址是() A.08090H B.08089H C.0808EH D.08450H 3、设ADRT=100H,不符合语法规则的语句是() A.MOV AX,ADRT B.MOV AX,[ADRT+SI] C.MOV ADRT,AX D.MOV ADRT[SI],AX 4、下面XCHG指令语句中,语法正确的是() A.XCHG BL,[BX] B.XCHG AX,DS C.XCHG AL,0FH D.XCHG[SI],[DI] 5、设BX=1234H,DS=2000H,(21234H)=5678H,则指令“LEA SI,[BX]”执行后的结果是() A.SI=5678H B.SI=1234H C.SI=2000H D.SI=3234H 6、设DF=0,SI=20H,CX=10H,执行REP LODSW指令后,SI中的内容是() A.20H B. 2A H C. 30H D.40H 7、设AL=0A8H,CL=23H,执行乘法指令MUL CL后,标志位OF,CF的值分别是() A.OF=0,CF=0 B.OF=1,CF=0 C.OF=0,CF=1 D.OF=1,CF=1 8、执行SUB AX,[BP][DI]指令,取源操作数时,使用的物理地址表达式是() A.16*SS+BP+DI B.16*ES+BP+DI C.16*DS+BP+DI D.16*CS+BP+DI 9、已知某操作数的物理地址是2117AH,则它的段地址和偏移地址可能是( ) A.2100∶117A B.2108∶00EA C.2000∶017A D.2025∶0F2A 10、某程序装入内存后,DS=1200H,CS=1400H,则程序中数据段中的数据最多是( )字节。 A.2K B.4K C.8K D.16K 11、将AX中有符号数除以2的正确指令是( )。 A.SHR AX,1 B.SAR AX,1 C.ROR AX,1 D.RCR AX,1 12、下列指令执行后,不改变AL寄存器内容的指令是( )。 A.AND AL,1 B.CMP AL,DL C.XOR AL,AL D.SUB AL,DL 13、执行1号DOS系统功能调用,从键盘输入的字符值存放在( )寄存器中。 A.AL B.BL C.CL D.DL 14、X DB 20H DUP(0) Y DW …7A',…8B' MOV CH,LENGTH Y MOV CL, LENGTH X 执行上述指令后,CX中的内容是() A.207AH B.2010H C.0120H D.7A20H 15、执行下面指令语句,则AX=( )。 MOV AL,95H CBW A.0095H B.0F95H C.0FF95H D.9095H 16、指令JMP FAR PTR DONE属于 A.段内转移直接寻址B.段内转移间接寻址 C.段间转移间接寻址D.段间转移直接寻址 17、执行如下程序: MOV AX,0

51汇编程序练习题1

单片机汇编程序设计练习 一、存储器之间的数据传送 1、编程实现将单片机内部RAM60H开始的连续32个单元置为FFH。 2、编程实现将内部RAM30H开始的连续16个数传送到内部RAM50H开始的连续单元中。 3、编程实现将单片机外部RAM2000H为首地址的数据块传送到单片机内部RAM30H开始的单元中,数据块的长度为32个字节。 4、编程实现将单片机内部RAM30H为首地址的数据块传送到外部RAM2000H 开始的单元中,数据块的长度存放于内部RAM的20H单元。 5、编程实现将单片机外部RAM2000H为首地址的数据块传送到单片机内部RAM30H开始的单元中,直到数据内容为0DH时停止传送。 6、编程实现将ROM1000H地址的内容传送到内部RAM的25H单元。 7、编程实现将ROM2000H开始的连续10个地址的内容传送到内部RAM的25H 开始的单元。 8、编程实现将ROM1000H开始的连续100个地址的内容传送到外部RAM2000H 开始的连续单元中。 二、查表程序设计 1、编写查表程序,要查表的数据存放在R7中,其范围为0~9。编程查其平方值,并存放于40H。 2、编写查表程序,要查表的数据存放在R7中,其范围为0~9。编程查其立方值,并存放于R6。 3、单片机外部ROM TAB1地址开始存放一组ASCII码表,试用查表方法,将R2的内容(范围为0~F)转换为与其对应 的ASCII码,并从P1口输出。 4、使用8051的P1口作为段控驱动共阳 LED数码管,硬件连接如图。 编程实现将8051 R7单元内容(在 00H-09H之间)显示在数码管上。00H-09H 的共阳字形代码如下表所示。 04H 05H 06H 07H 08H 09H

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

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

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课 后四、六章的答案,大家抓紧时间复习哦! 一、选择题 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和

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

汇编语言程序设计复习2(带答案)1

汇编语言程序设计练习题2 一、单项选择题(答案BDDBA BDADC CCAC CBBDA BDADA BCCB ) 1、使计算机执行某种操作的命令是( ) A.宏指令 B.指令 C.伪指令 D.语句 2、某存储单元的物理地址是12345H,可以作为它的段地址有()。 A.2345H B.12345H C.12340H D.1234H 3、8088/8086存储器分段,每个段不超过() A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4、计算机能直接识别并执行的语言是( ) A.汇编语言 B.机器语言 C.高级语言 D.低级语言 5. 8086/8088系统执行传送指令MOV时() A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 6、以下各个指令中正确的是()。 A. MOV CS, DX B. MOV DS, BP C. IN 20H,AL D. MOV AH, BX 7、下列对OUT指令的叙述正确的是()。 A. 实现从端口中读出数据 B. 能直接访问的端口范围是0~1KB C. 能访问的端口为64KBit D. 只能用DX做为间接寻址的寄存器 8、已有汇编语句“V AR EQU 1220H”,则语句“mov AX, V AR”中源操作数的寻址方式为()。 A. 立即寻址 B. 直接寻址 C. 寄存器间接寻址 D. 基址寻址 9、与MOV BX,OFFSET DATA1指令完全等效的指令是()。 A.MOV BX,DATA1 B.LDS BX,DATA1 C.LES BX,DATA1 D.LEA BX,DATA1 10、下列指令中段默认为堆栈段的是() A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB BX,[BP][DI] D. MOV DX,[1000H] 11、已知DS=2000H,ES=1000H, SI = 0800H,内存10880H开始的两个单元中存放5678H,内存20880H开始的两个单元中存放8765H,则语句“LEA BX,[SI+80H]”执行后BX 的值为()。 A. 5678H B. 1000H C. 0880H D. 8765H 12、汇编结束语句有()种格式,为()。

汇编语言基本关键字

汇编语言基本关键字 aaa对非压缩BCD码加法之和调整 aas 对非压缩BCD码减法之差调整 aam乘法调整aad被除数调整 add不带进位标志位的加法adc带进位标志位的加法 and逻辑与 assume指定段寄存器 bswap双字单操作数内部交换 bt位测试bts位测试并置一 btr位测试并清零btc位测试并取反 bsf/bsr正,反向位扫描 call调用 cbw字节转换为字cwd字转换为双字cwde字转换为扩展的双字cdq双字转换为四字 cmp比较cmpxchg比较并交换 cmps串比较 code定义简化代码段 const定义简化常数数据段 daa对压缩BCD码加法之和调整das对压缩BCD码减法之差调整 data定义简化数据段 db/dw/dd/dq/dt定义字节/字/双字/四字/十字变量 dec减一

df定义32位便宜地址的远地址指针 div无符号数除法 equ等价textequ文本等价 even取偶偏移地址 fardata,fardata定义简化独立数据段 group定义段组 idiv有符号整数除法 imul有符号整数乘法 in输入 inc加一 ins/outs输入/输出串元素 jcxz/jecxz若cx=0/ecx=0,跳转 jmpdopd无条件跳转到DOPD 处取出指令继续执行 label为$定义符号 Lahf 标志位低八位送AH lea 偏移地址送通用寄存器lda传送进入数据段的地址指针 les传送进入附加数据段的地址指针lfs传送进入FS段的地址指针lgs传送进入GS段的地址指针lss传送进入堆栈段的地址指针 local说明局部变量 lods读出串元素 Loop/loopd无条件循环cx/ecx为循环次数 loopnz/loopnzd非零或不等时循环,cx/ecx为循环次数

完整版汇编语言试题及答案..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——指令系统 参考答案

《汇编语言》习题1——指令系统参考答案 习题1-1 在8086CPU中,如果SS的内容设置为1A4BH,堆栈的长度为100H字节,问SP寄存器的初始化值为多少?SP初始指向哪个主存物理地址? 答:SP寄存器的初始化值为:100H SP初始指向的主存物理地址是:1A5B0H 习题1-2 分别说明下述8086指令中的源操作数和目的操作数的寻址方式。 指令目的操作数源操作数 (1) MOV ES, AX 寄存器寻址寄存器寻址 (2) ADD DS:[12H],AL 直接寻址寄存器寻址 (3) SUB BX,1200H 寄存器寻址立即寻址 (4) SHR AX,1 寄存器寻址立即寻址 (5) AND -28H[BP][DI], AX 基址变址寻址寄存器寻址 (6) MOV CX,LAB1[BX] 寄存器寻址基址/变址寻址 (7) SBB AX, [BX] 寄存器寻址寄存器间接寻址 (8) OR DX,-360H[SI] 寄存器寻址基址/变址寻址 (9) ADC VAR1,CX 直接寻址寄存器寻址 (10) XOR [DI],AX 寄存器间接寻址寄存器寻址 习题1-3分别说明下述指令语句的语法正确与否,如果有错,说明其错误。 指令正误 (1)MOV DS, 1234H 错误,立即数不能直接传送到段寄存器中 (2)ADD AH,AL 正确 (3)SUB CS,AX 错误,不能对CS直接操作 (4)MOV BX,[BX][SI] 正确 (5)ADC VAR1,[BP][DI] 错误,两个操作数不能同时都在存储器中 (6) SBB [BX][BP],AX 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器 (7)PUSH 5678H 错误,立即数不能作为源操作数直接压入堆栈 (8)SHL [BP][SI],CL 错误,目的操作数没有明确指明是字还是字节 (9)ROR AX,2 错误,移位次数大于1时,需将其提前存入CL中 (10)NEG AX,BX 错误,操作数个数错误 (11)LEA CS,AX 错误,目的操作数只能是16位通用寄存器 (12)MOV AL,BX 错误, 操作数位数不一致 (13)ADD DS:200H,AX 正确 (14)AND [BX][BP],AH 错误, 基址变址寻址方式中不能两个寄存器都 是基址寄存器 (15)OR BH,-16H[BP] 正确 (16)CLC AX 错误,操作数个数错误 (17)MUL AX,BX 错误,操作数个数错误 (18)DIV 12H 错误,源操作数不能是立即数 习题1-4 在8086中,如果(DS)=1A26H,(SS)=20B0H,(BX)=1200H,(SI)=0034H, (BP)=5700H(1B484H)=1234H,(26200H)=5678H,给出下面各指令或指令组执行后相应寄存器/存储单元的结果。

汇编语言基础知识

汇编语言基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有 效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel 公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。 1.1 微型计算机概述 微型计算机由中央处理器(Central Processing Unit ,CPU )、存储器、输入输出接口电路和总线构成。CPU 如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。存储器包括随机存储器(Random Access Memory ,RAM )和只读存储器(Read Only Memory ,ROM )。输入输出接口电路用来连接外部设备和微型计算机。总线为CPU 和其他部件之间提供数据、地址和控制信息的传输通道。如图1.1所示为微型计算机的基本结构。 外部设备存储器输入输出接口电路中央处理器 CPU 地址总线 数据总线 控制总线 图1.1 微型计算机基本结构 特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变 为各个部件面向总线的单一关系。一个部件只要符合总线结构标准, 就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。 数据总线用来在CPU 与内存或其他部件之间进行数据传送。它是双向的,数据总线 的位宽决定了CPU 和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。 地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了 CPU 可以直接寻址的内存范围。如 CPU 的地址总线的宽度为N ,则CPU 最多可以寻找2N 个内存单 元。

汇编语言试题及答案.

一,单项选择题(每小题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

汇编语言试题及答案(1)

一,单项选择题(每小题1分,共20分) 1.指令JMP FAR PTR DONE属于() 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.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的字节

汇编语言第1-2章平时练习(已看完)

1. 知识点:0202(基于微处理器的计算机系统构成) 在下列的选项中,能够组成计算机系统的是(A)。选项A)硬件系统和软件系统 选项B)CPU、存储器、输入/输出设备 选项C)操作系统、各种语言 选项D)系统软件和应用软件 2. 知识点:01 (基础知识) 汇编语言属于( B) 选项A)用户软件 选项B)系统软件 选项C)高级语言× 选项D)机器语言× 5知识点:0203(中央处理机) 中央处理器CPU是由(D)组成的 选项A)运算器 选项B)控制器 选项C)寄存器组 选项D)前三者 答案:D 6. 知识点:0201(80x86微处理器) IBM PC机的DOS是属于(B )。 选项A)用户软件

选项B)系统软件 选项C)系统硬件 选项D)一种语言 8. 知识点:0203(中央处理机) 8086/8088 CPU的寄存器组中,8位的寄存器共有(C )个 选项A)4 选项B)6 选项C)8 选项D)10 9. 知识点:0203(中央处理机) 8086/8088 CPU的寄存器组中,16位的寄存器共有()个。 选项A)10 选项B)12 选项C)13 选项D)14 10. 知识点:0204(存储器) 8086/8088 CPU执行算术运算时PSW共有()个标志位会受影响。选项A)4 选项B)5 选项C)6 SF,ZF,CF,OF,PF.AF 选项D)7 11. 知识点:0204(存储器)

在程序执行过程中,IP寄存器始终保存的是()。选项A)上一条指令的首地址 选项B)本条指令的首地址 选项C)下一条指令的首地址 选项D)需计算有效地址后才能确定地址 12. 知识点:0204(存储器) IBM PC机的存储器可分()个段。 选项A)4 选项B)256 选项C)512 选项D)65536 13知识点:0204(存储器) 当使用BP作编程地址时,此时使用的是()段。选项A)CS 选项B)DS 选项C)ES 选项D)SS 17知识点:0204(存储器) 存储器的一个字节表示()位。 选项A)8 选项B)16 选项C)32

汇编语言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说明为远过程。

汇编语言习题一(1.3.5.6)

1.汇编语言的主要特点有哪些? 1、与机器相关性 汇编语言指令是机器指令的一种符号表示,而不同类型的CPU有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。 由于汇编语言程序与机器的相关性,所以,除了同系列、不同型号CPU之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU之间的汇编语言程序是无法移植的,也就是说,汇编语言程序的通用性和可移植性要比高级语言程序低。 2、执行的高效率 正因为汇编语言有“与机器相关性”的特性,程序员用汇编语言编写程序时,可充分发挥自己的聪明才智,对机器内部的各种资源进行合理的安排,让它们始终处于最佳的使用状态,这样做的最终效果就是:程序的执行代码短,执行速度快。 现在,高级语言的编译程序在进行寄存器分配和目标代码生成时,也都有一定程度的优化(在后续课程《编译原理》的有关章节会有详细介绍),但由于所使用的“优化策略”要适应各种不同的情况,所以,这些优化策略只能在宏观上,不可能在微观上、细节上进行优化。而用汇编语言编写程序几乎是程序员直接在写执行代码,程序员可以在程序的每个具体细节上进行优化,这也是汇编语言程序执行高效率的原因之一。 3、编写程序的复杂性 汇编语言是一种面向机器的语言,其汇编指令与机器指令基本上一一对应,所以,汇编指令也同机器指令一样具有功能单一、具体的特点。要想完成某件工作(如计算:A+B+C等),就必须安排CPU的每步工作(如:先计算A+B,再把C 加到前者的结果上)。另外,在编写汇编语言程序时,还要考虑机器资源的限制、汇编指令的细节和限制等等 由于汇编语言程序要安排运算的每一个细节,这就使得编写汇编语言程序比较繁琐、复杂。一个简单的计算公式或计算方法,也要用一系列汇编指令一步一步来实现。 4、调试的复杂性 在通常情况下,调试汇编语言程序要比调试高级语言程序困难,其主要原因有四: (1)汇编语言指令涉及到机器资源的细节,在调试过程中,要清楚每个资源的变化情况; (2)程序员在编写汇编语言程序时,为了提高资源的利用率,可以使用各种实现技巧,而这些技巧完全有可能破坏程序的可读性。这样,在调试过程中,除了要知道每条指令的执行功能,还要清楚它在整个解题过程中的作用; (3)高级语言程序几乎不显式地使用“转移语句”,但汇编语言程序要用到大量的、各类转移指令,这些跳转指令大大地增加了调试程序的难度。如果在汇编语言程序中也强调不使用“转移指令”,那么,汇编语言程序就会变成功能单调的顺序程序,这显然是不现实的; (4)调试工具落后,高级语言程序可以在源程序级进行符号跟踪,而汇编语言程序只能跟踪机器指令。不过,现在这方面也有所改善,CV(CodeView)、TD(Turbo Debug)等软件也可在源程序级进行符号跟踪了。

汇编语言入门教程

汇编语言入门教程 2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK 出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS 段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。

相关文档
最新文档