文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言

汇编语言

汇编语言
汇编语言

第一章基础知识

一.单项选择题

1.在下列的选项中,能够组成计算机系统的是( A )。

A.硬件系统和软件系统B.CPU、存储器、输入/输出设备

C.操作系统、各种语言D.系统软件和应用软件

2.汇编语言属于( B )。

A.用户软件B.系统软件C.高级语言D.机器语言

3.汇编语言源程序经汇编程序汇编后产生的文件的扩展名是( B )。

A.EXE B.OBJ C.ASM D.LST

4.汇编语言的什么文件经链接(LINK)后产生可执行文件?

A.ASM B.EXE C.LST D.OBJ

5.中央处理器CPU是由( D )组成的。

A.运算器B.控制器C.寄存器组D.前三者

6.IBM PC机的DOS是属于( B )。

A.用户软件B.系统软件C.系统硬件D.一种语言

7.汇编语言源程序是(A )程序。

A.不可直接执行B.可直接执行的

C.经汇编程序汇编后就可执行

D.经连接后就可直接执行的

8.8086/8088 CPU的寄存器组中,8位的寄存器共有(C )个。

A.4B.6C.8D.10

9.8086/8088 CPU的寄存器组中,16位的寄存器共有( D )个。AX,BX,CX,DX,DS,CS,SS,ES,FS,GS,DI,SI,BP,SP,

A.10B.12C.13D.14

10.8086/8088 CPU执行算术运算时PSW共有( C )个标志位会受影响。SF,ZF,PF,CF,OF,AF TF DF IF

A.4B.5C.6D.7

11.在程序执行过程中,IP寄存器始终保存的是( C )。

A.上一条指令的首地址B.本条指令的首地址。

C.下一条指令的首地址D.需计算有效地址后才能确定地址。

12.IBM PC机的存储器可分( D )个段。

A.4B.256C.512D.65536

13.当使用BP作编程地址时,此时使用的是( D )段。

A.CSB.DSC.ESD.SS

14.如果指令的运算结果为0,则( C )标志位为1。

A.SFB.OFC.ZFD.CF

15.如果指令的运算结果中有奇数个1,则( A )标志位为0。

A.PFB.CFC.OFD.SF

16.IBM PC机的内存是按( B )是编址的。

A.位B.字节

C.字D.双字

17.存储器的一个字节表示( A )位。

A.8B.16C.32D.64

18.如果某个字变量的数据存放在奇地址单元,则8086/8088 CPU读写该变量时

需要( 2 )个读写周期。

A.1B.2C.3D.4

19.在机器内部操作中,CPU与存储器之间的任何信息交换使用的都是(B )地址。

A.逻辑B.物理C.有效D.相对

20.一个16位相对位移的范围是( C )。

A.0~65535 B.0000H~FFFFH

C.8000H~7FFFH D.8000H~FFFFH

21.物理地址的形成过程是将段地址左移( C )位加偏移地址。

A.2B.3C.4D.5

22.如果某一存储单元的逻辑地址为236FH:1000H。则物理地址为(D )。A.1236FH B.336FH C.336F0H D.246F0H

23.如果内存的某一单元的物理地址为12345H。则它的逻辑地址为( C ):0345H。A.0012H B.12000H C.1200H D.0120H

24.如果一个字变量中存放16个字,该字变量的起始地址为1000H:2000H,则该字变量数据区中的最末一个字单元的物理地址为( C )。

A.1201FH B.12000H C.1201EH D.12020H

25.设22000H、22001H单元分别存放的数据为12H、34H,若要读取22000H 字单元中的数据,此时读出的数据是(C )。

A.12H B.34H C.3412H D.1234H

26.如果数据存放在DI的内容为偏移地址的数据段中,设DS=3624H,DI=2200H,则此存储单元的物理地址为( A )。

A.38440H B.58240H C.25624H D.58240H

27.一般的外部设备接口电路中的状态寄存器是用来存放外设或接口电路的(C )信息。

A.数据B.控制C.状态D.前三者

28.下列叙述正确的是( B )。

A.不同类型的机器字长是一样的

B.一个字节有8位二进制数

C.各种不同的机器指令系统都是一样的

D.机器指令都是8位的

29.下列叙述正确的是( D )。

A.8088 CPU的内部数据总线是8位的,外部数据总线是8位的

B.8088 CPU的内部数据总线是16位的,外部数据总线是16位的

C.8086 CPU的内部数据总线是8位的,外部数据总线是8位的

D.8086 CPU的内部数据总线是16位的,外部数据总线是16位的

30.下列叙述正确的是( A )。

A.机器指令是可执行指令

B.汇编语言源程序可直接执行

C.汇编语言目标程序可直接执行

D.高级语言程序可直接执行

二.多项选择题

1.中央处理器CPU是由(ABC )组成的。

A.运算器B.控制器C.寄存器组D.存储器

2.下列寄存器中属于段寄存器的有( CD )。

A.SI B.DI C.SS D.ES

3.下列属于系统软件的有(ABD )。

A.操作系统B.汇编语言C.高级语言D.编译程序

4.下列的16位寄存器中能够用2个8位寄存器来表示的有( BD )。

A.SI B.AX C.BP D.BX

5.逻辑地址是由( AC )组成的。

A.段地址B.物理地址C.偏移地址D.实际地址

6.在下列标志位中,不能根据运算结果置位/复位的标志位有( AC )。

A.IF B.PF C.TF D.OF

7.在下列的标志位中,够能根据运算结果置位/复位的标志位有( ABD )。

A.ZF B.PF C.DF D.SF

8.在下列的逻辑地址中,用来表示同一个物理地址3240AH的有(A C D )。

A.3040H:200AH B.240AH:3000H C.3200H:040AH D.3000H:240AH

9.在下列文件中,能够在计算机上直接运行的有(ABD )。

A.EXE文件B.COM文件C.OBJ文件D.BAT文件:批处理10.在外部设备接口电路中,一般有(ABD )。

A.数据寄存器B.状态寄存器C.标志寄存器D.控制寄存器三.填空题

1.中央处理器CPU包括_运算器______,_控制器______和内部可编程的___寄存器组____。

2.计算机的硬件系统包括CPU_______,___存储器____和输入/输出子系统三个主要组成部分。

3.汇编语言是属于__系统_____软件。

4.汇编语言源程序必须经过__汇编程序汇编___后再__连接____才能产生___.EXE____文件。

5.装入程序的作用是把要执行的__程序_____和库文件或其它已翻译过的__子程序_____连接在一起形成机器能___执行____的程序。

6.装入程序的作用是将程序从___外存储器____传送到_内存______。

7.在PC机中,一些简单的汇编语言可以通过___调试程序____来建立、修改和执行。

8.操作系统是属于_系统______软件。

9.调试程序是属于_____系统__软件。

10.用汇编语言编写的图像显示软件属于_用户(应用)______软件。11.8086/8088 CPU的地址有__20_____位。可寻址的内存地址空间是__1MB_____。

12.8086/8088 CPU有__6__个段寄存器。

13.在读取下一条指令时,__CS____中的内容为作为该指令的段地址,___IP___中的内容作为该指令的偏移地址。

14.当两个无符号数的字节相加时,其结果超过___255____时就将CF置1。15.当两个有符号数的字节相加时,其结果超过_-128~127 _____时就将OF置1。16.若运算的结果为负数,则SF为__1_____。

17.IBM PC机的存储器是按____字节___编址的。

18.若某双字变量中存放两个数据,它占用___8____个存储单元。

19.在8086/8088 CPU的微机中,CPU访问奇地址字单元需___2____个内存读写周期,访问偶地址字单元需___1____个内存读写周期。

20.IBM PC机的存储器按段划分,每个段的大小可在_16-64KB_____范围内选取任意个______数。

21.IBM PC机的1MB内存空间最多可分为____64K ___个段。

22.逻辑地址是由___段地址____和偏移地址_______组成的,它可以形成20位的物理地址。

23.形成内存物理地址的过程是将___段地址____左移_4______位加偏移地址。

24.某微机的字长为32位,一个字需占用内存___4____个字节单元。

25.若某存储单元的逻辑地址为1200H:3400H,则该存储单元的物理地址为__15400H_____。

26.IBM PC机可寻址的I/O端口地址有___64K____,共使用____16___条地址线。

27.若要将字1234H存放在以10000H开始的存储单元之中,则10000H=__34H_____,10001H=__12H_____。

28.若要将双字12345678H存放在20000H开始的存储单元之中,则20002H=__34H___。

29.外设与接口电路中的控制寄存器中的内容是由__CPU__送来的。

30.外设与主机传递信息是通过外设接口电路实现的。一般的接口电路中有数据寄存器_______、_状态寄存器_____和_控制寄存器______三种不同类型的寄存器。

31.压缩型BCD码一个字节能表示__2_____位十进制数,非压缩型BCD码一个字节能表示___1____位十进制数。

32.辅助进位位AF主要是用于对__`十进制_____数据进行算术的调整。

四.简答题

1.IBM PC微型计算机一般采用什么总线结构形式?这种总线结构将那几个主要部件连接在一起构成微型计算机的硬件系统?

答:I B M P C微型计算机一般采用单总线的结构形式,它将C P U、存储器核输入/输出接口连接在一起

2.8086/8088 CPU为什么只能寻址1MB的内存空间?

答:因为8986/8088C P U的地址线只有20位,2的20次方可表示1M,又因为8086/8088C P U的微机是按字节编址的,所以它只能寻址1M B的内存空间3.IBM PC机的存储器为什么要分段?怎样采用分段寻址?

4.一个8位数能表示的最大值和最小值是多少?一个16位数能表示的最大值和最小值是多少?

5.如何实现ASCII码数字字符与BCD码之间的相互转换?

答:将数字字符的A S C I I码减去30H就可以得到B C D码

6.简述存储器的逻辑地址、物理地址和有效地址。

答:用段地址和偏移地址表示存储单元的地址为逻辑地址,逻辑地址不是唯一的,同一地址可以有不同的表示,用20位的二进制表示存储单元的地址称为物理地址,每一个地址都是唯一的,由逻辑地址形成物理地址的过程是将段地址左移4位加偏移地址。计算偏移地址是由相关项组成的,由这些相关项计算得到地址称

为有效地址(E A )

7.堆栈操作的原则是什么?堆栈操作的过程是怎样进行的? 8.在8086/8088系统中,内存的逻辑地址是由哪两部分组成的? 9.下列操作可使用哪些寄存器? (1)加法和减法。

AX BX CX DX SI DI BP SP (2)循环计数。CX

(3)乘法和除法。 (4)指示程序已执行到哪条指令的地址。IP (5)指示当前从堆栈中弹出数据的地SP 址。 23000H (6)表示运算结果为零。 PSW ZF

23001H

10.在存储器中存放的数据如图1.3 23002H

所示,读出23004H 字节单元中的 23003H

内容是多少?读出23002H 字单元 23004H 中的内容是多少?读出23003H 字 23005H 单元中的内容是多少?23000H 双

字单元之中的数据是多少? 图1.3 存储器存放的数据

11.设SS=1200H ,堆栈压入10个字节后,SP=00F6H 。请指出堆栈底部字单元的物理地址,堆栈顶部字单元的物理地址。

12.设有一个30个字的数据区,它的起始地址是2000H :3000H ,请给出这个数据区的首、末字单元的物理地址。

13.请将下列左边的项与右边的解释联系起来(把所选字母填在括号中) (1)CPU ( M ) A .保存当前的栈顶地址的寄存器。

(2)存储器 ( C ) B .指示下一条要执行的指令的地址。

(3)堆栈 ( D ) C .存储程序、数据等信息的记忆装置,在PC 机有ROM 和

RAM 两种。

(4)IP ( B ) D .以后进先出方式工作的存储空间。

(5)SP ( A ) E .把汇编语言程序翻译成机器语言程序的系统程序。 (6)状态标志 ( L ) F .唯一代表存储空间中每个字节单元的地址。 (7)控制标志 ( K ) G .能被计算机能够直接识别的语言。

(8)段寄存器 ( J ) H .用指令助记符、符号地址、标号等符号书写的程序语言。

(9)物理地址 ( F ) I .把若干模块连接起来成为可执行文件的系统程序。 (10)汇编语言 ( N H ) J .在PC 机中,保存各逻辑段起始地址的寄存器有CS 、DS 、

SS 、ES 四个寄存器。

(11)机器语言 ( G ) K .控制操作的标志,PC 机有DF 、IF 、TF 。

(12)汇编程序 (E ) L .记录指令操作结果的标志,在PC 机中有OF 、SF 、ZF 、

AF 、CF 、PF 。

……

41H

37H

62H

5FH

47H

36H

……

(13)连接程序( I )M.分析、控制并执行指令的部件,由ALU和寄存器组组成。

(14)指令( H O)N.由汇编程序在汇编过程中执行的指令。

(15)伪指令( O N)O.告诉CPU要执行的操作,在程序运行时执行。14.简述汇编语言、机器语言与高级语言的区别。

参考答案

一.单项选择题

1.A 2.B 3.B 4.D 5.D 6.B 7.A 8.C 9.D 10.C 11.C 12.D 13.D 14.C 15.A 16.B 17.A 18.B 19.B 20.C 21.C 22.D 23.C 24.C 25.C 26.A 27.C 28.B 29.D 30.A 二.多项选择题

1.ABC 2.CD 3.ABCD 4.BD 5.AC

6.AC 7.ABD 8.ACD 9.ABD 10.ABD

三.填空题

1.运算器,控制器,寄存器组。

2.CPU,存储器。

3.系统

4.汇编程序汇编,连接,可执行(EXE)

5.程序,子程序,执行

6.外存储器,内存

7.调试程序

8.系统

9.系统

10.用户(应用)

11.20,1MB

12.6

13.CS,IP

14.255

15.+127~-128

16.1

17.字节

18.8

19.2,1

20.16-64KB,字节

21.64K

22.段地址,偏移地址

23.段地址,4,偏移地址

24.4

25.15400H

26.64K,16

27.34H,12H

28.34H

29.CPU

30.数据寄存器,控制寄存器,状态寄存器

31.2,1

32.十进制

四.简答题

1.IBM PC微型计算机一般采用单总线的结构形式,它将CPU、存储器和输入/输出接口等连接在一起。

2.因为8086/8088 CPU的地址线只有20位。2的20次方可表示1M。又因为8086/8088 CPU的微机是按字节编址的,所以它只能寻址1MB的内存空间。3.因为IBM PC机可寻址1MB的内存空间,而8086/8088 CPU的内部寄存器只有16位的。16位的寄存器只能表示64K,它不能直接对1MB的内存空间进行寻址。为了寻址1MB的任何一个存储单元,必须将1MB的内存空间进行分段。分段的方法是将1MB的内存空间分为若干段,每个存储单元由段地址和段内的偏移地址表示,将段地址左移4位加偏移地址形成20位的物理地址。

4.当一个8位数据为无符号数时,它的表示范围是0~255,当它为有符号数时,其表示范围是-128~127。当一个16位数据为无符号数时,它的表示范围是0~65535。当它为有符号数时,其表示范围是-32768~32767。

5.将数字字符的ASCII码减去30H就可得到BCD码。

6.用段地址和偏移地址表示存储单元的地址为逻辑地址。逻辑地址不是唯一的,同一地址可以有不同的表示。用20位的二进制表示存储单元的地址称为物理地址。每一个地址都是唯一的。由逻辑地址形成物理地址的过程是将段地址左移4位加偏移地址。计算偏移地址是由相关项组成的。由这些相关项计算得到的地址称为有效地址(EA)。

7.堆栈的操作是采用后进先出的原则。堆栈操作的过程是在压栈时先将SP—2→SP,然后将要压入的字压入到SS:SP所指示的单元中;在弹栈时,先将SS:SP所指示的字单元中的内容弹出来送到目标地址中,然后将SP+2→SP。

8.逻辑地址是由段地址和偏移地址两部分组成的。CS寄存器中的内容作段地址时,IP寄存器中的内容作偏移地址;SS寄存器中的内容作段地址时,SP寄存器中的内容作偏移地址。在没有段超越前缀的情况下,如果BP 中的内容作操作数的基址指针,使用的段寄存器也是SS。DS作为寻找操作数的段寄存器,与它对应的寄存器有BX、SI和DI。在串操作指令中,DI中的内容作源操作数的偏移地址时,ES作为段寄存器。在有段超越前缀时,则根据指定的段寄存器作段地址。

9.(1) AX、BX、CX、SI、DI、BP、SP

(2) CX

(3) AL、AX、DX

(4) CS:IP

(5) SS:IP

(6) PSW的ZF位

10.47H,5F62H,475FH,5F623741H

11.堆栈顶部字单元的物理地址为12000H + 00F6H = 120F6H

堆栈底部字单元的物理地址为12000H

12.首字单元的物理地址为20000H + 3000H = 23000H

末字单元的物理地址为20000H + 3000H+( 30-1 ) * 2 = 2303AH 13.(1) M (2) C (3) D (4) B (5) A (6) L (7) K (8) J

(9) F (10) H (11) G (12) E (13) I (14) O (15) N

14.用二进制代码编写程序的语言称为机器语言,它不需要进行转换便可直接在机器上执行。但机器语言难于理解,不易记忆。

用助记符、数据项等符号书写的、其主要操作与机器指令基本上一一对应的,并遵循一定语法规则的计算机语言称为汇编语言。它与机器语言相比,需要经过汇编程序汇编产生目标代码,经过连接后才能产生可执行文件。但在表达形式上比机器语言更易于理解、编程和阅读。

用定义符和数据项等内容编写程序的语言称为高级语言。它是一种接近于自然语言的语言,它与算法有关而与机器无关。它需要经过编译程序编译转换成目标代码。相对于机器语言、汇编语言而言,转换后的目标代码所占用的内存空间大,执行程序的速度慢,但较容易编写程序,也易于阅读和理解。

第二章8086/8088的寻址方式和指令系统

一.单项选择题

1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为( B )。

A.5000H B.5008H C.23008H D.32008H

2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为( A )。

A.13000H B.23000H C.33000H D.3000H

3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为( B )。

A.20200H B.30200H C.50200H D.200H

4.指令MOV MEM[BX],AX中的MEM是( C )。

A.原码B.反码C.补码D.移码

5.用来作为寄存器间接寻址的寄存器有( D )个。

A.8 B.6 C.5 D.4

6.指令MOV [BX+SI],AL中的目的操作数使用( B )段寄存器。BP:SS A.CS B.DS C.SS D.ES

7.指令MOV BX,[BP+5]中的源操作数使用( C )段寄存器。

A.CS B.DS C.SS D.ES

8.段内间接寻址只改变( B )中的内容。

A.CS B.IP C.CS和IP D.PSW

9.段间间接寻址只改变( C )中的内容。

A.CS B.IP C.CS和IP D.PSW

10.下述指令中不改变PSW的指令是( A )。

A.MOV AX,BX B.AND AL,0FH

C.SHR BX,CL D.ADD AL,BL

11.下述指令中不影响CF的指令是( B )。

A.SHL AL,1 B.INC CX

C.ADD [BX],AL D.SUB AX,BX

12.两个整数补码9CH和7AH相加运算后,会产生( B )。

A.无溢出且无进位B.无溢出但有进位

C.有溢出且有进位D.有溢出但无进位

13.指令JMP WORD PTR [BX]属于( B )寻址。

A.段内直接B.段内间接C.段间直接D.段间间接

14.指令MOV AX,[BX+SI+8]的源操作数属于( D )寻址。

A.直接 B.寄存器相对C.基址变址D.相对基址变址

15.指令( A )不改变CF的内容。

A.DEC AL B.ADD AX,CX

C.SUB [BX],CL D.SBB AL,DL

16.十进制数字74所对应的压缩型BCD码的形式是( B )。

A.74 B.74H C.4AH D.4A

17.十进制数字85所对应的非压缩型BCD码的形式是( D )。

A.0085 B.0085H C.0805 D.0805H

18.设AL=67H,执行“CMP AL,76H”后,AL=( C )。

A.76H B.0DFH C.67H D.00

19.设AL=65H,BL=29H,执行下列指令后,AL=( C )。

ADD AL,BL

DAA

A.8EH B.94 C.94H D.8E

20.压栈操作是( B )位数的操作。

A.8 B.16 C.32 D.任意

21.执行IMUL指令时,如果乘积的高位部分不是低位部分的符号扩展,则( D )。A.OF=0、CF=0 B.OF=0、CF=1 C.OF=1、CF=0 D.OF=1、CF=1 22.设AX=3762H,CL=5,执行“SHR AX,CL”后,AX=( B )。A.0376H B.01BBH C.01BB D.0376

23.若要在BUF缓冲区中寻找与AL中不相等的数据,应使用(C )SCASB串操作指令。

A.REPNE B.REP C.REPE D.REPNZ

24.如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一条指令的操作码,那么该条指令的位移量是( C )。

A.20H B.1EH C.0DEH D.0E0H

25.如果“JA P”指令的操作码放在0050H, 该指令的位移量为34H,执行完此条指令转移到取下一条指令的偏移地址为(C )

A.0082H B.0084H C.0086H D.0088H

26.若DS=1000H,BX=2000H,(12000H)=56H,(12001H)=78H,AX=1000H,执行

“ADD AX,[BX]”指令后,AX=( A )。

A.8856H B.6678H C.8800H D.6600H

27.设AX、BX寄存器中存放的是有符号的二进制数据,若执行“CMP AX,BX”指令后,( D )L表示大于则转L。

A.JZ B.JA C.JGE D.JG

28.执行“DIV BX”指令后,( C )寄存器中存放商。

A.AL B.AH C.AX D.DX

29.执行“( A )AX,BX”指令不改变AX寄存器中的内容。

A.CMP B.ADD C.XOR D.OR

30.若AX=1000H,执行“NEG AX”指令后,AX=( C )。

A.1000H B.0E000H C.0F000H D.1001H

二.多项选择题

1.在下列寻址方式中,用来访问内存的寻址方式有(BCD )。

A.寄存器寻址B.寄存器间接寻址C.寄存器相对寻址D.直接寻址

2.用来作为寄存器间接寻址的寄存器有(BC)。

A.AX B.BX C.BP CX

3.在下列指令中,源操作数使用DS段寄存器进行寄存器相对寻址的有( AD )。

A.MOV AX,[DI+4] B.MOV AX,ES:[SI+8]

C.MOV AX,[BP+4] D.MOV AX,[BX+4]

4.在下列指令中,源操作数的寻址方式是错误的有(BCD )。

A.MOV AX,[DI+BX] B.MOV AX,[SI+DI]

C.MOV AX,[BP+BX] D.MOV AX,[DX]

5.在下列指令中,属于段内转移指令的有(A B D )。

A.JMP SHORT A

B.JMP [BX]

C.JMP DWORD PTR [BX]

D.JMP NEAR PTR [BX+SI]

6.在下列指令中,错误的指令有( ABCD )。

A.SUB 5,AL B.ADD AL,BX

C.INC [BX] D.SHR AX,6

7.执行“CMP AX,8003H”指令后,当AX中的无符号数高于8003H时,下列指令中有效的转移指令有(AB )。

A.JNB L B.JA L C.JG L D.JNL L

8.可与串操作指令“CMPSW”指令配合使用的重复前缀有( BCD )。

A.REP B.REPZ C.REPNZ D.REPE

9.在下列的输入/输出指令中,正确的指令有(ABD )。

A.IN AX,80H B.OUT DX,AX

C.IN AL,340 D.OUT DX,AL

10.在下列的指令中,错误的指令有(AB CD )。

A.PUSH AL B.MOV AL,BX

C.PUSH 1000H D.CALL AX

11.可以用下列指令代替“LOOP L”指令的有(A )。

A.DEC CX B.DEC CX

JNZ L JNC L

C.DEC CX D.DEC CX

CMP CX,0 JE L

JE L

三.填空题

1.在一条指令中,立即数只能作操作数。

2.8086/8088 CPU形成的内存物理地址有 20位。

3.指令“MOV AX,[BX+SI]”的源操作数在内存的 DS 段。

4.指令“MOV BX,[BP+DI]”的源操作数在内存的 SS段。

5.指令“MOV AX,ES:[SI]”的源操作数在内存的 ES 段。

6.入栈指令使用的是 SS段。

7.指令“ADD [BX+SI],AL”的目的操作数是 I基址加变址寻址方式。

8.指令“SUB BX,A[SI]”的源操作数是寄存器相对寻址方式。

9.指令“JMP DWORD PTR [BX]”属于段间间接寻址方式。

10.可作为寄存器间接寻址的寄存器有 4 个。

11.堆栈是从高地址向低方向生长的。其操作遵循先进后出的操作原则。

12.在进行弹栈操作时应该先将弹出的数据送目标地址,然后 SP+2 。13.在进行多精度加法运算时,一般使用 ADC 指令。

14.通用的数据传送指令不影响标志位。

15.“INC AL”指令不影响标志位的 CF 位。

16.若AL=11H,执行“NEG AL”后,AL=0EF。

17.JMP指令的执行不影响PSW寄存器中的各位。

18.两个无符号数进行比较时,可以根据 CF(SF),JA(JB、JC、JNC、JS、JNS)标志位来判断大小。在编写程序时可使用

指令来实现。

19.若执行“DIV BX”,其被除数的高16位必须放在DX,低16位必须放在 AX。20.DAA指令只对 AL 寄存器中的内容进行调整。

21.若AL=84H,在执行CBW后,AX=0FF84H。

22.十进制数1234的压缩型BCD码为。

23.执行AND AL,0FH

JNZ L

指令,是检测AL中的低四位位,当它为非零则转移。

24.若移位指令的移位位数大于1时,其移位位数必须放在 CL 中。

25.如果AL=85H,CL=4,执行“SAR AL,CL”时,AL= 0F8H ,CF= 0 。26.在串操作指令中,SI指向源串,DI指向目的串。

27.如果要查找某串中与AL寄存器中有相同的字符(数),则在SCASB指令前应配合使

用 REPNZ/REPNE 重复前缀。

28.转移指令“JNZ L ”的转移范围(十进制)是 -128~127 。该指令的第二个字节为位移量,用形式表示。

29.段内调用指令改变 IP 中的内容。

30.段间调用指令改变 CS和IP 中的内容。

四.判断题(判断下列指令是否正确,如果是错误的,请指出错误的原因)1.ADD AL,BX

2.MOV [BX],SI

3.SUB [BX],[SI]

4.CMP 5,AL

5.MOV CX,AX

6.LEA BL,A

7.SHR AL,6

8.MOV AL,[DI+SI]

9.MOV BL,200H

10.MOV AX,DATA

11.INC [BX]

12.CMP [BX],A ;A为变量

13.MOV AX,‘+’

14.MOV AX,[BP+BX]

15.ADD AX,[CX]

16.OUT 400,AL

17.JNC P

18.MOV BX,,OFFSET A

19.LEA DI,A[SI]

20.CMP AX,5

五.改错题(按下列指令中的原意改正下列指令)

1.DEC [SI]

2.CMP AL,BX ;无符号数比较

3.MOV [DX],AL

4.MOV AL,300H

5.MOV [BX],[DI] ;字节操作

6.ADD AL,[CX+SI]

7.ADD AL,BX ;有符号数相加

8.PUSH AL

9.CMP [BX],5 ;字节比较

10.MOV DS,1234H

六.简答题

1.设BX=1000H,SI=2000H,位移量D=3000H,请指出下列各种寻址方式的有效地址是什么?

(1)使用D的直接寻址3000H

(2)使用BX寄存器的间接寻址1000H

(3)使用BX寄存器的相对寻址4000H

(4)基址变址寻址3000H

(5)相对基址变址寻址6000H

2.请指出下列各条指令的源操作数的寻址方式是什么?

(1)MOV AX,BUF 直接寻址

(2)CMP AL,5 立即寻址

(3)ADD [BX+5],AX 寄存器

(4)SUB AX,[BX+SI] 基址加变址寻址

(5)ADC AH,A[SI] 寄存器相对寻址

(6)MOV BX,[SI] 寄存器间接寻址

(7)AND CX,B[BP+SI] 相对基址变址寻址

(8)JMP WORD PTR [BX] 段内间接寻址

(9)JMP P 段内直接寻址

(10)JMP FAR PTR P 段间直接寻址

3.设DS=2000H,BX=0100H,SI=0002H,(20100H)=12H,(20101H)=34H,

(20102H)= 56H,(20103H)= 78H,(21200H)= 2AH,(21201H)= 4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内

容是多少?

(1)MOV AX,1200H 1200H

(2)MOV AX,BX 0100H

(3)MOV AX,[1200H] 4C2AH

(4)MOV AX,[BX] 3412H

(5)MOV AX,[BX+1100H]

(6)MOV AX,[BX+SI]

(7)MOV AX,[BX+SI+1100H]

4.按下列各小题的要求写出相应的一条汇编语言指令。

(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中ADD DX,BX

(2)以BX和SI寄存器作基址变址寻址方式,把该单元中的一个字传送到AX。MOV AX,[BX,SI]

(3)以SI和位移量20H作寄存器相对寻址,将该单元中的内容与CX寄存器中的内MOV CX,[SI+20]

容相加,结果存入CX寄存器中

(4)清除AX寄存器的内容,同时清除CF标志位XOR AX,AX

(5)将字单元NUM与0B6H进行比较CMP WORD PTR NUM,0B6H

5.按下列各小题的要求使用相应的几条指令完成其操作。

(1)将偏移量为200H的存储单元中的数与300H相加,结果存入AX寄存器中MOV AX,[200H]

ADD AX,300H

(2)比较AX寄存器中与BX寄存器中的16位有符号数,当AX中的内容大于BX

中的内容时转移到L。CMP AX,BX

JG L

(3)将BUF1和BUF2中的16位数据交换

MOV AX,BUF1

XCHG AX,BUF2

(4)测试BUF字缓冲区中第15位,如果为1则转移到P

TEST WORD PTR BUF,8000

JNZ P

(5)将BUFI和BUF2的字相加,结果送S缓冲区

MOV AX,BUF1

ADD AX,BUF2

MOV S,AX

6.设BX=8234H,请说明下列两条指令的区别,执行下列各指令后BX中的内容是什么?

SHR BX,1

SAR BX,1

7.分别说明下列每组指令中的两条指令的区别。

(1)MOV BX,BUF LEA BX,BUF

(2)OR BL,0FH AND BL,0FH

(3)JMP SHORT L JMP L

SHORT 是短转移,产生的目标代码的位移是8位,而JMP L 产生的位移是16位

(4)MOV AX,BX MOV AX,[BX]

(5)MOV AX,[BX+DI] MOV AX,[BP+DI]

8.说明下列各指令的源操作数和目的操作数的存储地方。

(1)MOV [2000H],AX

(2)ADD AX,[BX+5]

(3)LEA SI,BUF

(4)DAA

(5)MUL BL

9.指出下列无条件转移指令的转移目标地址是什么?存放在何处?

(1)JMP BX

(2)JMP WORD PTR [BX]

(3)JMP DWORD PTR [BX]

(4)JMP P

(5)JMP SHORT R

10.说明MOVSB和CMPSB各能使用哪些重复前缀?

七.程序分析题

1.现有程序段如下:

MOV AX,1234H

MOV BX,60H

ADD AX,BX

请回答:(1)该程序段完成的功能是什么?

1234H和60相加,结果放在AX中

(2)程序段执行完后AX= 1294H 。

2.现有程序段如下:

MOV AX,0603H

MOV BL,8

AAD

DIV BL

请回答:(1)该程序段完成的功能是什么?

(2)程序段执行完后AX= 。

3.设AX=0D023H,BX=9FD0H,试分析执行完如下程序段后程序转向何处?ADD AX,BX

JNO L1

JNC L2

SUB AX,BX

JNC L3

JNO L4

JMP L5

4.程序段如下:

MOV AX,X

MOV DX,X+2

ADD AX,Y

ADC DX,Y+2

ADD AX,36

ADC DX,0

SUB AX,Z

SBB DX,Z+2

MOV W,AX

MOV W+2,DX

请回答:(1)该程序段完成的功能是什么?X+Y+36-Z

(2)该程序的操作数是何类型?字

(3)结果存放在何处?W

5.设A为字节变量,变量中的内容分别为64H、52H;B为字节变量,变量中的内容分别为12H、46H,现有程序段如下:

MOV AL,A

SUB AL,B

DAS

MOV C,AL

MOV AL,A+1

SBB AL,B+1

DAS

MOV C+1,AL

请回答:(1)该程序段完成的功能是什么?实现连个压缩型BCD码的减法,即A-B,结果放在C中

(2)最后结果是什么?

6.现有程序段如下:

MOV BL,AL

MOV CL,4

SHR BL,CL

MOV A,BL

AND AL,0FH

MOV B,AL

请回答:(1)该程序段完成的功能是什么?

(2)如果AL的初值为56H,则A= ,B= 。

7.现有程序段如下:

MOV AL,8

MOV BL,7

MUL BL

AAM

ADD AX,3030H

XCHG AH,AL

MOV BUF,AX

请回答:(1)该程序段完成的功能是什么?

(2)BUF两个单元中的值分别为。

8.现有程序段如下:

MOV AX,M

MOV DX,N

SHR DX,1

RCR AX,1

请回答:(1)该程序段完成的功能是什么?

(2)若M=1234H,N=5678H,程序运行后DX= ,AX= 。9.现有程序段如下:

XOR AX,AX

MOV AX,6342H

MOV CX,0404H

ROL AH,CL

XCHG CH,CL

ROR AL,CL

请回答:(1)该程序段执行后AX= 3624H 。

(2)CF=0 。

10.现有程序段如下:

MOV AX,1

MOV BX,2

MOV CX,4

MOV DX,3

L:INC AX

ADD BX,AX

SHR DX,1

LOOPNZ L

请回答:(1)该程序段的循环次数是多少?2

(2)该程序段执行完后AX= 3 ,BX= 7 ,CX= 4 ,DX= 0 。11.现有程序段如下:

MOV CX,16

MOV BX,0

MOV DX,1

L:MOV AX,9AB8H

AND AX,DX

JZ N

INC BX

N:SHL DX,1

LOOP L

MOV M,BX

请回答:(1)该程序段完成的功能是什么?

(2)该程序段执行完后(M)= 。

12.现有程序段如下:

CLD

MOV SI,OFFSET BUF1

MOV DI,OFFSET BUF2

MOV CX,100

REP MOVSB

请回答:该程序段完成的功能是什么?

13.现有程序段如下:

CLD

LEA DI,BUF

MOV AL,20H

MOV CX,100

REPNZ SCASB

请回答:(1)该程序段完成的功能是什么?

(2)若ZF=1,表示BUF中值为20H数据

(3)若BUF的首地址为0,ZF=0,执行完该程序段后DI= 。14.现有程序段如下:

MOV AL,0

MOV BL,1

MOV CX,10

L:ADD AL,BL

INC BL

LOOP L

请回答:(1)该程序段完成的功能是什么?

(2)该程序执行完后,AL= 。

15.现有程序段如下:

MOV AX,M

CMP AX,N

JA L

MOV AX,M+2

CMP AX,N+2

JAZ L

MOV FLG,BYTE PTR 0

JMP P

L:MOV FLG BYTE PTR 1

P:…

请回答:(1)该程序段完成的功能是什么?

(2)若M=1234H,N=5678H,则FLG= 。

16.现有程序段如下:

MOV CX,100

LEA BX,BUF

MOV DX,0

L1:MOV AL,[BX]

CMP AL,10

JL L2

INC DX

L2:INC BX

LOOP L1

请回答:(1)该程序段完成的功能是什么?

(2)如果将JL改为JG,该程序段完成的功能又是什么?

17.设TAB中存放的数据为30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,现有程序段如下:

LEA BX,TAB

MOV AL,X ;X为数字0~9

XLAT

请回答:(1)该程序段完成的功能是什么?

(2)若X中的内容为4,则AL= 。

18.现有程序段如下:

LEA SI,BUF1

LEA DI,BUF2

MOV CX,100

L:MOV AL,[SI+100]

MOV [DI],AL

INC DI

DEC SI

LOOP L

请回答:该程序段完成的功能是什么?

19.现有程序段如下:

MOV AX,BUF

CMP AX,0

JNS L

MOV BX,BUF+2

NEG BX

MOV BUF+2,BX

NOT AX

ADC AX,0

MOV BUF,AX

L:…

请回答:该程序段完成的功能是什么?

20.现有程序段如下:

MOV AL,X

AND AL,0FH

JZ L

MOV BYTE PTR FLG,1

JMP M

L:MOV BYTE PTR FLG,0

M:…

请回答:该程序段完成的功能是什么?

八.程序设计题

1.使用串操作指令,将BUF缓冲区中的100个字节清0。

2.比较5个字节的字符串A和B,若两个串相等则字节标志单元FLG置0;否则清1。

3.设BUF缓冲区中有100个字数据。编写程序段统计100个字数据中数据为0的个数,

并将统计的结果存放在DL寄存器中。

4.计算Z=(X+5)*Y+30,(X,Y为无符号字节数据)。

5.将DX:AX:BX中的48位数乘以2。

6.将有100个字符的缓冲区BUF中的$符号用空格(20H)代替。

7.将有符号的字数据A和B中的大者存入C中。

8.测字单元A中的第四位是否为0,是则FLG置1,否则清0。

9.将DX:AX中的32位数据逻辑左移2位。

10.将100个元素的字数组A中的每个元素减1。

参考答案

一.单项选择题

1.B 2.A 3.B 4.C 5.D 6.B 7.C 8.B 9.C 10.A 11.B 12.B 13.B 14.D 15.A 16.B 17.D 18.C 19.C 20.B 21.D 22.B 23.C 24.C 25.C 26.A 27.D 28.C 29.A 30.C 二.多项选择题

1.BCD 2.BC 3.AD 4.BCD 5.ABD 6.A BCD7.AB 8.BCD 9.ABD 10.ABCD 11.AC

三.填空题

1.源

2.20

3.DS(数据)

4.SS(堆栈)

5.ES(附加)

6.SS(堆栈)

7.基址加变址

8.寄存器相对

9.段间间接

10.4

11.高,低,后进先出(先进后出)

12.目标地址,SP+2

13.ADC(带进位加)

14.标志位(PSW)

15.CF

16.0EFH

17.不影响

18.CF(SF),JA(JB、JC、JNC、JS、JNS)

19.DX,AX

20.AL

21.0FF84H

22.1234H

23.低4位

24.CL

25.0F8H,0

26.源,目的

27.REPNE(REPNZ)

28.–128~127,补码

29.IP

30.CS和IP

四.判断题

1.错,两个操作数的类型不一致。

2.对

3.错,双操作数不能同时是内存中的数据。

4.错,5是立即数,不能作目标地址。

5.对

6.错,A的偏移地址是16位的,而BL是8位的寄存器,两个操作数的类型不一致。

7.错,移位指令的移位位数大于1时,其移位位数应存放在CL寄存器中。8.错,DI和SI不能同时使用在一种寻址方式中。

9.错,200H超出一个字节的范围,两个操作数的类型不一致。

10.对

11.错,[BX]是字节还是字操作不明确,有二义性。

12.错,双操作数不能同时是内存中的数据。

13.对

14.错,BP和BX不能同时使用。

15.错,CX不能作寄存器间接寻址。

16.错,OUT指令的地址超过255时,必使用DX寄存器作为间接寻址的寄存器。

17.对 18.对19.对20.对

五.改错题

1.DEC BYTE PTR [SI] 或DEC WORD PTR [SI] 2.MOV AH,0

CMP AX,BX

3.MOV SI,DX 或MOV DI,DX 或MOV BX,DX

MOV [SI],AL MOV [DI],AL MOV [BX],AL

4.MOV AX,300H

5.MOV AL,[DI]

MOV [BX],AL

6.ADD SI,CX

ADD AL,[SI]

7.CBW

ADD AX,BX

8.PUSH AX

9.CMP BYTE PTR [BX],5 或CMP [BX],BYTE PTR 5 10.MOV AX,1234H

MOV DS,AX

六.简答题

1.(1)3000H

汇编语言实现十进制加减计算器

课程设计 题目十进制数加减计算器学院计算机科学与技术 专业计算机科学与技术 班级计算机0808班 姓名何爽 指导教师袁小玲 2010 年12 月31 日

课程设计任务书 学生姓名:何爽专业班级:计算机0808班 指导教师:袁小玲工作单位:计算机科学与技术学院 题目: 十进制数加减计算器的设计 初始条件: 理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。 实践:计算机学院科学系实验中心提供计算机和软件平台。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)十进制数加减计算器的设计。 (2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。 (3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。 (4)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 在正文第一行写课程设计题目; 1.需求说明(要求、功能简述)或问题描述; 2.设计说明(简要的分析与概要设计); 3.详细的算法描述; 4.源程序与执行结果(含测试方法和测试结果); 5.使用说明; 6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该 程序进一步改进扩展的设想)。 时间安排: 设计时间一周:周1:查阅相关资料。 周2:系统分析,设计。 周3~4:编程并上机调试。 周5:撰写课程设计报告。 设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。 设计报告书收取时间:20周的星期五下午5:00之前。 指导教师签名: 2010年12月31日 系主任(或责任教师)签名: 2010年12月31日

《汇编语言》在线作业二

请同学及时保存作业,如您在20分钟内不作操作,系统将自动退出。 《汇编语言》在线作业二 一、单选题(共 20 道试题,共 100 分。) V 1. 在多重循环程序中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B )。 A. 不必考虑 B. 必须重新设置 C. 必须置1 D. 须清0 满分:5 分 2. 伪指令是(C)规定的汇编说明符,它在源程序汇编时进行说明。 A. DEBUG B. LINK C. MASM D. EDIT 满分:5 分 3. 下列描述正确的是(D)。 A. 在多重循环程序中,内层循环只能有一个 B. 在汇编语言程序设计中,二重循环程序之间的关系可以交错 C. 在汇编语言程序设计中,每次循环应返回到置初值部分之前 D. 在汇编语言程序设计中,每次循环应返回到置初值部分之后 满分:5 分 4. 下列指令会影响标志位的指令是(D)。 A. JMP L

B. JC L C. MOV AL,L D. SHL AL,1 满分:5 分 5. LINK命令执行后可以生成一个以(B)为扩展名的文件。 A. ASM B. EXE C. OBJ D. COM 满分:5 分 6. 如果0100H单元存放条件转移指令的操作码,0101H单元存放条件转移指令的相对位移量 13H,那么转移后的指令的偏移地址为(C)。 A. 0102H B. 0113H C. 0115H D. 00FEH 满分:5 分 7. 若DS=1000H,BX=2000H,(12000H)=56H,(12001H)=78H,AX=1000H,执行“ADD AX,[BX]”指令后,AX=(A)。 A. 8856H B. 6678H C. 8800H D. 6600H 满分:5 分 8. 下列叙述正确的是(A )。 A. 执行一条段间调用指令,先将CS、IP的内容压栈,然后将目的地址送CS和IP。 B. 执行一条段间调用指令,先将目的地址送CS和IP,然后将CS、IP的内容压栈。

汇编语言知识大全

第一章基础知识: 一.机器码: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

汇编语言程序设计期末考试试卷及参考答案

【汇编语言程序设计】期末考试-试卷及参考答案

执行上述两条指令后,正确的结果是( B )。 A.(AX)=1001H; B.(AX)=0FFFH; C.(AX)=1000H; D.(AX)=0111H。 6.串指令中的目的操作数地址一定是由____A_ _提供。()A.ES:[DI] ; B.SS:[BP]; C.DS:[SI] ; D.CS:[IP]。 7.将DX的内容除以2,正确的指令是( C )。 A.DIV 2 ; B.DIV DX,2 ; C.SAR DX,1; D.SHL DX,1。 8. 用户为了解决自己的问题,用汇编语言所编写的程序,称为( B )。 A.目标程序; B.汇编语言源程序; C.可执行程序; D.汇编程序。 9.用一条指令仅实现将AX←BX+SI的方法是( D )。 A.XCHG AX,[BX][SI] ; B.MOV AX,[BX+SI]; C.LEA AX,BX[SI] ; D.LEA AX,[BX][SI]。 10.设SP初值为2000H,执行指令“PUSH AX”后,SP的值是( C )。 A.1FFFH; B.1998H; C.1FFEH; D.2002H。 2. C 二、指出下列指令的出错原因,并改正。(每小题2分,共12分) 1.MOV BX,DL;操作数类型不匹配,改正为:MOV BL,DL 或MOV BX,DX 2.MOV CS,AX;代码段寄存器CS不能作目的操作数,改正为MOV DS,AX 3.ADD AX,DS;段寄存器DS的内容不能作为加法指令的操作数,改正为 MOV BX,DS ADD AX,BX 4.TEST BX,[CX];不能使用CX实现寄存器间接寻址,改正为 MOV SI,CX TEST BX,[SI] 5.SUB [BX],[BP+SI];两个操作数不能同为存储器操作数,且两个操作数的数据类型不确定,改正为:MOV AX,[BX] SUB AX,[BP+SI] 或:MOV AL,[BX] SUB AL,[BP+SI] 6.SHL DX ;没有给出移位次数,改正为SHL DX,1或 SHL DX,CL 三、程序填空题(注意:每空只能填一条指令,并注释说明所填指令的作用!每空3分,共18分) 1.在表TABLE处存放着N个无符号字节数,求表中前10个字节数的总和并

C语言与汇编语言互相调用

浅谈C程序中调用汇编模块的方法 C语言是目前非常流行的一种编程语言,除具有高级语言使用方便灵活、数据处理能力强、编程简单等优点外,还可实现汇编语言的大部分功能,如可直接对硬件进行操作、生成的目标代码质量较高且执行的速度较快等。所以在工程上对硬件处理速度要求不很高的情况下,基本可以用C代替汇编语言,编写接口电路的控制软件。但C也不能完全取代汇编语言,如在一些对速度要求很高的实时控制系统中,以及对硬件的特殊控制方面,C有时也不能完全很好胜任,还需要汇编语言来编写。因为汇编语言目标代码更精练,对硬件直接控制能力更强和执行速度更快,但汇编语言编程烦难、表达能力差也显而易见。比较好的解决办法是C与汇编语言混合编程,即用C编写软件的调度程序、用户界面以及速度要求不高的控制部分,而用汇编语言对速度敏感部分提供最高速度的处理模块,供C调用。这种方法提供了最佳的软件设计方案,做到了兼顾速度效率高和灵活方便。由于本人的毕业设计需要C 程序中调用汇编模块的方法来提高ARM定点指令的执行速度,故对这方面进行了学习。学习心得如下: 对于C和汇编语言的接口主要有两个问题需要解决。 一、调用者与被调用者的参数传递 这种数据传递通过堆栈完成,在执行调用时从调用程序参数表中的最后一个参数开始,自动依次压入堆栈;将所有参数压入堆栈后,再自动将被调用程序执行结束后的返回地址(断点)压入堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。例如一调用名为add汇编程序模块的主函数:main( ){...... add(dest,op1,op2,flages);......}。在此例中对主函数进行反汇编,主函数在调用add函数前自动组织的堆栈。 . . . lea 0xfffffffe8(%ebp),%eax #flages数组的首地址入栈 push %eax pushl 0xfffffff8(%ebp) #OP2入栈 pushl 0xfffffffc(%ebp) #OP1 入栈 pushl 0xfffffff0(%ebp) #dest地址入栈 call 0x80483f0 #调用add函数 . . 执行完add调用语句后,栈内数据结果如图一所示。 进入汇编子程序后,为了能正确获取主调程序并存入堆栈中的数据,被调的汇编子程序先后要做如下一些工作: 1、保存esp的副本 进入汇编子程序后,子程序中免不了要有压栈和出栈的操作,故ESP时刻在变化。为了能用ESP访问堆栈中的参数,安全办法是一进入子程序后,先为ESP制副本,以后对传递参数的访问都用副本进行。一般可用EBP保存ESP,如: push %ebp mov %ebp,%esp

32位80x86汇编语言ptr指令学习笔记

阅读反汇编后的汇编程序挺麻烦,尤其是在c语言程序的子函数参数中有数组参数,同时当子函数里有循环操作时,反汇编后的代码中频繁出现ptr指令操作。该指令的用法十分灵活,有时候读入(或写入)的是某内存地址,有时候读入(写入)的是某内存地址中存储的值,初学时总感觉很迷惑,分不清什么时候读内存地址,什么时候读内存地址中值,参考相关文献和书籍后作如下总结。 例如一段简单的C语言程序: int mywork(int a[9], int b[9], int c[9]) { int i; for ( i=0; i<9; i++) c[i] =a[i] +b[i]; } 这段代码debug版反汇编后代码很简单,但是里面有许多小细节值得推敲。 int mywork(int a[9], int b[9], int c[9]) ;原c代码 … … ;这里为开始调用函数时当前寄存器数据保存 for ( i = 0 ; i < 9 ; i ++) mov dword ptr [i], 0;这里为i初始化,值为0 jmp mywork+xx1h ;进入循环体内部 mov eax, dword ptr [i]; add eax, 1 mov dword ptr [i], eax mywork+xx1h:cmp dword ptr [i], 9 jge mywork+xx2h ;如果i等于或大于9,跳出循环 c[i] =a[i] +b[i]; mov eax, dowrd ptr [i] ;读入参数i mov ecx, dword ptr [a] ;这里是读入参数数组a的首地址 mov edx, dword ptr [b] ;这里是读入参数数组b的首地址 mov eax, dword ptr [ecx + eax*4] ;读入a add eax, dword ptr [edx +eax*4] ; eax = a[i]+b[i] mov edi, dword ptr [c] ;这里是读入参数数组c的首地址 mov dword ptr [edi+ eax*4], eax ;这里保存计算结果,c[i]= a[i]+b[i] inc eax jmp mywork+xx1h mywork+xx2h: … … ;一些数据恢复操作,主要是出栈等 ret 文中用红色标记处两处涉及ptr指令的地方。 第一处为mov eax, dword ptr [i] 本条mov指令的结果是将变量i的值读入到eax寄存器中,至于从i变量存储地址处读取几个字节,由dword修饰符指定(4个字节)。 第二处为mov ecx, dword ptr [a] 这里表示将参数数组a的首地址读入到ecx寄存器中。 同样两个mov 寄存器, dword ptr [变量]操作,为何第一个寄存器eax读入数值,而第二个ecx寄存器读入的为地址呢?

汇编语言-期末考试-试题讲课教案

一、单项选择题(本大题共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.XOR BX,BX B.OR BX,BX C.AND BX,BX D.CMP BX,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.指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B.指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C.指令AND AX,OFH执行后,分离出AL低四位 D.NOT AX,执行后,将AX清0 7.在执行下列指令时,需要使用段寄存器DS的指令是() A.STOSW B.ADD AL,CL C.NEG BX D.INC DA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是()A.ADD BH,01H B.OR BH,01H C.XOR BH,01H D.TEST BH,01H 9.完成对CL寄存器的内容乘以4的正确操作是() A.ROL CL,1B.MUL4 ROL CL,1 C.SHL CL,1D.MOV CL,2 SHL CL,1SHL CL,CL 10.下面各传送指令中,正确的是() A.MOV[DI],[SI]B.MOV[DX+DI],AL C.MOV WORD PTR[BX],0100H D.MOV AL,BX 11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法() A.名字的第一个字符可以是大写英文字母及小写英文字母 B.名字的第一个字符可以是字母、数字及、@、_ C.名字的有效长度≤31个字符 D.在名字中不允许出现$

汇编语言实现十个数的排序

DATAS SEGMENT DATA0 DB'Please input a numbers (0-65535):','$' DATA1 DB' over flow input again:','$' DATA2 DB'The num you have put is:',0ah,0dh,'$' DATA3 DB'After exchange the num is:',0ah,0dh,'$' DATA4 DB' ','$' DATA DW 10 DUP(?) DATAS ENDS STACKS SEGMENT DW 256 DUP(?);此处输入堆栈段代码STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DA TAS,SS:STACKS ;/****************************************/ ;-----------程序开始------------ START: MOV AX,DA TAS MOV DS,AX MOV SI,0 MOV CX,10 ;----------循环输入------------ L: CALL INPUT ADD SI,2 CALL NEWLINE LOOP L MOV DX,OFFSET DATA2 MOV AH,9 INT 21H ;-------输入后显示---------- MOV CX,10 MOV DI,0 AGAIN: CALL PRINT CALL SPACE ADD DI,2 LOOP AGAIN ;----------排序-------------

MOV CX,9 MOV DI,0 LOOP0: CALL SORT ADD DI,2 LOOP LOOP0 CALL NEWLINE MOV DX,OFFSET DATA3 MOV AH,9 INT 21H ;----------交换后显示------------- MOV CX,10 MOV DI,0 AGAIN0: CALL PRINT CALL SPACE ADD DI,2 LOOP AGAIN0 ;----------返回系统-------------- EXIT: MOV AH,4CH INT 21H ;/**************************************/ ;------------输入函数-------- INPUT PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;----------提示信息---------- MOV DX,OFFSET DATA0 MOV AH,9 INT 21H MOV BX,0 ;BX存放十进制数 CLC MOV DX,0

浅谈计算机编程语言的发展

浅谈计算机编程语言的发展 信息学院103班潘红10263210 摘要:一九九三年美国的克林顿政府提出了“信息高速公路”计划,从而在这十多年间在全球范围内引发了一场信息风暴,信息技术几乎触及了现代生活的方方面面,毫不夸张的说没有了信息技术,现代文明的生活将无从谈起;作为信息技术中最重要的部分,计算机技术无疑是其发展的核心问题,而我们知道计算机只是一台机器,它只能按照计算机语言编好的程序执行,那么正确认识计算机语言的过去和未来,就是关系到计算机发展的重中之重。1.引言 在计算机科学中,编程语言是用来编写可被计算机运行的一系列指令(计算机程序)的人工语言,于英语等自然语言相类似,编程语言具有词汇、语法和句法。然而,自然语言不适合计算机编程,因为它们能引起歧义,也就是说它们的词汇和语法结构可以用多种方式进行解释。用于计算编程的语言必须具有简单的逻辑结构,而且它们的语法、拼写和标点符号的规则必须精确。 2.计算机编程语言的发展历史 二十世纪四十年代当计算机刚刚问世的时候,程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语言来解决问题的人是德国工程师楚泽(konrad zuse)。几十年后,计算机的价格大幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间来得宝贵。于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也得益于可以重用的程序代码库。随着c,pascal,fortran,等结构化高级语言的诞生,使程序员可以离开机器层次,在更抽象的层次上表达意图。由此诞生的三种重要控制结构,以及一些基本数据类型都能够很好的开始让程序员以接近问题本质的方式去思考和描述问题。随着程序规模的不断扩大,在60年代末期出现了软件危机,在当时的程序设计模型中都无法克服错误随着代码的扩大而级数般的扩大,以至到了无法控制的地步,这个时候就出现了一种新的思考程序设计方式和程序设计模型-----面向对象程 序设计,由此也诞生了一批支持此技术的程序设计语言,比如eiffel,c++,java,这些语言都以新的观点去看待问题,即问题就是由各种不同属性的对象以及对象之间的消息传递构成。面向对象语言由此必须支持新的程序设计技术,例如:数据隐藏,数据抽象,用户定义类型,继承,多态等等。 3.计算机编程语言的发展现 目前通用的编程语言有两种形式:汇编语言和高级语言。 2.1汇编语言 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。计算机编程人员用汇编语言使机器语言程序编写起来更简单一些。在汇编语言中,每条语句大致对应一条机器语言指令。汇编语言的语句是借助易于记忆的命令编写的。在典型的汇编语言

《汇编语言程序设计》在线测试

《汇编语言程序设计》第01章在线测试 《汇编语言程序设计》第01章在线测试剩余时间:59:54 答题须知:1、本卷满分20分。 2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。 3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。 第一题、单项选择题(每题1分,5道题共5分) 1、一个字节的二进制位数是____位。 A、4 B、8 C、16 D、32 2、微机中每个存储单元具有一个地址,其中存放一个____量。 A、比特(1位) B、字节(8位) C、字(16位) D、双字(32位) 3、设段地址为5788H,偏移地址为94H,该字节的物理地址_____。 A、57974H B、5883H C、58ECH D、57914H 4、汇编语言源程序中,每个语句由4项组成,不影响语句功能的是_____。 A、名字项 B、助记符(操作码) C、操作数 D、注释 5、执行INT 21H指令后,8086CPU将转入_____号中断服务程序。 A、20 B、20H C、21 D、21H 第二题、多项选择题(每题2分,5道题共10分) 1、如下________名称属于8086的16位通用寄存器。 A、IP B、DS C、BP D、DX E、AX 2、采用汇编语言进行程序开发,可以使用的工具软件有______。 A、文本编辑程序 B、汇编程序 C、调试程序 D、集成化开发环境 E、连接程序 3、使用MASM 6.x版本的“ML /Fl eg101.asm”命令,如果源程序eg101.asm没有语法错误,则将生成_________文件。 A、目标代码文件

ARM中C语言调用汇编语言方法浅析

ARM中C语言调用汇编语言方法浅析在嵌入式系统开发中,目前使用的主要编程语言是C 和ARM指令汇编。在一些对性能非常敏感的代码块,基于汇编与机器码一一对应的关系,这时不能依靠C编译器的生成代码,而要手工编写汇编,从而达到优化的目的。 一、在C语言中内嵌汇编 在C中内嵌的汇编指令包含大部分的ARM和Thumb指令,不过使用与单纯的汇编程序使用的指令略有不同,存在一些限制,主要有下面几个方面: ①不能直接向PC 寄存器赋值,程序跳转要使用B或者BL指令; ②在使用物理寄存器时,不要使用过于复杂的C表达式,避免物理寄存器冲突; ③R12和R13可能被编译器用来存放中间编译结果,计算表达式值时可能把R0-R3、R12及R14用于子程序调用,因此避免直接使用这些物理寄存器; d 一般不要直接指定物理寄存器; ④让编译器进行分配内嵌汇编使用的标记是__asm或asm关键字,用法如下:__asm{instruction [; instruction]}或asm("instruction [; instruction]")。 下面是一个例子来说明如何在C中内嵌汇编语言: //C语言文件*.c #include void my_strcpy(const char *src, char *dest){ char ch; __asm{ loop: ldrb ch, [src], #1 strb ch, [dest], #1 cmp ch, #0 bne loop } } int main(){ char *a="forget it and move on!"; char b[64]; my_strcpy(a, b); printf("original: %s", a); printf("copyed: %s", b); return 0; } 在此例子中C语言和汇编之间的值传递是用C语言的指针来实现的,因为指针对应的是地址,所以汇编中也可以访问。

汇编语言复习题

汇编语言复习题 第2章8086CPU寄存器的结构及使用 1.8086CPU由指令执行部件EU和总线接口部件BIU两部分组成。其中EU的功能是控制和执行指令,主要由算术逻辑部件ALU、EU控制部件、8个16位寄存器和一个标志寄存器FLAGS组成。BIU的功能是从存储器预取指令和数据,以及所有EU需要的总线操作,实现CPU与存储器和外设间信息传递。BIU由指令队列、指令指针寄存器、段寄存器、地址加器组成。 2.Intel 8086CPU共有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的字节单元内容是多少?

《汇编语言程序设计》期末复习题答案_57431457509182192

《汇编语言程序设计》复习题(答案指导/带页号)一、选择(30题) 1.下列是8位带符号二进制数的补码,其中最大的是( B )。参见P22 A、10001000 B、00000001 C、00000000 D、11111111 2.在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现 ( C )参见P157、158 A、占内存空间小,但速度慢 B、占内存空间相同,速度快 C、占内存空间大,但速度快 D、占内存空间相同,速度慢 3.数据定义为:EE DB 3,4 CC DW 3456H,6789H 执行指令“MOV CX,WORD PTR EE+1”后,(CX)= ( B )参见P27、63、64 A、0304H B、5604H C、3404H D、3456H 4.有如下指令序列: MOV AL,95H MOV CL,2 SAR AL,CL 上述指令序列执行后,AL的内容是( D )参见P95 A、05H B、25H C、24H D、0E5H 5.设A=18610,B=2738,C=0BB16,把这三个数看成无符号数,则它们之间的关系是( D )参见P23、15 A、A>B>C B、 A

《汇编语言》问题3.10解析

1、如果要在10000H处写入字型数据2266H,可以用以下的代码完成: mov ax,1000H mov ds,ax mov ax,2266H mov[0],ax 补全下面的代码,使它能够完成同样的功能:在如果要在10000H处写入字型数据2266H。 要求:不能使用“mov内容单元,寄存器”这类命令。 _____________ _____________ _____________ mov ax,2266H push ax 解析:大家看,如何实现在10000H处写入字型数据2266H? 也就是说要在SS:SP(1000:0)指向的栈顶处将字型数据2266H写入。 那我们在10000H处写入字型数据2266H前的栈顶指向肯定SS:SP(1000:2),即为我需要初始化栈时设定的栈顶。 因此,完成的程序如下。 mov ax.1000H mov ss,ax mov sp,2 mov ax,2266H push ax 2、如果要在1000H处读取字型数据2266H,可以用以下的代码完成: mov ax,1000H mov ds,ax mov ax,2266H mov ax,[0] 补全下面的代码,使它能够完成同样的功能:在如果要在10000H处读取字型数据2266H。 要求:不能使用“mov内容单元,寄存器”这类命令。 _____________ _____________ _____________ mov ax,2266H pop ax 解析:如何在10000H处读取字型数据2266H? 也就是说要在SS:SP(1000:0)指向的栈顶处将字型数据2266H读取。 那我们在10000H处读取字型数据2266H前的栈顶指向肯定SS:SP(1000:0),即为我需要初始化栈时设定的栈顶。 因此,完成的程序如下。 mov ax.1000H mov ss,ax mov sp,0 mov ax,2266H pop ax 总结:写入数据的话,写入数据时的栈顶和当前栈顶(即写入数据前的栈顶)不一样;读取数据的话,读取数据时的栈顶和当前栈顶(即读取数据前的栈顶)一样。

浅谈对C语言的认识

浅谈对C语言的认识 摘要:C语言作为一种通用的命令式计算机编程语言,提供了有效利用汇编语言的途径,使低级的机器指令能以简易的方式进行编译。随着C语言的国际标准化,它已经成为有史以来使用最广泛的编程语言之一,对计算机编程领域产生了不可估量的影响。计算机编程爱好者和专业人士都应当学习C语言,为学习高级编程语言奠定坚实的编程基础。本文从C语言的语法特点、数据结构、应用以及衍生等方面进行简要介绍,旨在提供入门知识的浅显参考。 关键字:C语言;语法特点;数据结构 一、C语言的语法特点 1. 字符集 C语言的基本字符集包括基本拉丁字母小写和大写字母(a-z,A-Z)、十进制数字(0-9)、特殊图形字符(!@#$%^&*()[]{};:’”,<.>/?`~\|)以及空白字符(空格、水平制表符、垂直制表符、换页符、换行符)。虽然换行符只是表示文本行的结尾,实际并不需要与某个字符对应,但是为了方便,C语言中它仍然被认为是一个字符。字符串文字使得C语言可以进行多字节字符编码,并且C标准库中自带字符串操作函数。C语言的可执行字符集包含相同的字符,以及警报、退格和回车等。随着C语言标准的不断修订,对扩展字符集的支持逐渐在增加。

2. 关键字 C语言中定义了一些特殊的关键字,只能用于C语言编译本身使用,而不能用于如命名之类的操作。在C语言标准C89中有32个常见关键字,如double、int、Char等数据型关键字,以及if、else、break、Continue等控制型关键字。后来的C99和C11标准又分别提出了5个和7个关键字,如_Bool、_Alignas等。大多数最新的关键字都是以下划线开头,后面跟着一个大写字母。当C开始支持这些扩展关键字时,以前留存的C程序代码没有使用过这些关键字,因此不会受到任何影响,在无需任何改动的情况下仍可继续使用。 3. 运算符 运算符是语句表达式中,用于指定执行该表达式时要执行的具体操作。C语言支持相当多的运算符,如加(+)、减(-)、乘(*)、除(/)、余(%)等算术符,赋值符(=)、大于(>)、小于(<)、不大于(<=)、不小于(>=)等关系符。C语言遵循Fortran和PL/I的语言习惯,用等于号(=)来表示赋值,但与ALGOL 等语言不同,C使用(==)来检验是否相等。如果混淆这两个运算符(=和==),很容易导致意外的错误,并且在很多情况下不会产生错误信息,例如条件表达式if (a==b+1)和if (a=b+1)都可以编译通过,但运行结果是截然不同的。 二、C语言的数据结构 C语言中的数据是静态的,有各种大小的整数类型(有符号和无符号)、浮点数和枚举类型,以及派生类型,包括数组、指针等。 1. 指针 C语言支持使用指针,这是一种在内存中记录对象或函数的地址或地址引用的数据类型。指针可以被间接用于访问存储在指向地址的数据,或调用指向函数,通过赋值或指针算术即可操作指针。指针在C语言中用途繁多,例如文本字符串通常使用指针指向字符数组,动态内存分配使用指针执行,许多如树这样的数据类型通常采用指针链接在一起的方式进行动态分配结构对象。指针的使用需格外小心,因为它们通常是未选中的,可以使指针变量指向任意位置,这可能会导致意外的错误。所幸的是,C语言允许指针类型之间进行操作和转换,能够有效地将指针指向安全的地方。 2. 数组

汇编语言程序设计第一二三阶段在线作业

第一次在线作业)单选题 (共40道题 2.51.(分)8086CPU在基址变址的寻址方式中,变址寄存器可以为:?CX或、BX A?SI B、CX或?SI C、DX或?DI D、SI或我的答案:D 此题得分:2.5分的源操作数的位置是:,,则指令SI=1234H MOV AX,[BX+SI+2]2.52.(分)已知BX=2000H?的字节、数据段中偏移量为3236H A?的字节、附加段中偏移量为3234H B?的字节、数据段中偏移量为3234H C?的字节D、附加段中偏移量为3236H我的答案:分A 此题得分:2.5IP(2.5分)在程序执行过程中,寄存器中始终保存的是: 3.?、上一条指令的首地址A?、下一条指令的首地址B ?、正在执行指令的首地址C ?、需计算有效地址后才能确定地址D我的答案:2.5分B 此题得分:,那32K16分)位二进制)是某系列微机对存储器的分段,如果每一个段最多的字存储单元(2.54.(么表示段内字节单元偏移地址的二进制位数应是:?位20 A、?位16 B、?位C、15 ?位12 D、我的答案:B 此题得分:2.5分(2.5分)可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是:5.?DXCX,AX A、,BX,?SS,CSB、DS,ES, ?BXBP,IP,,C、SP?BXBP,,D、SIDI,我的答案:分D 此题得分: 2.5 . . . . 顺序存放在连续两个字存储单元中,可选用Ⅱ码两个字符的ASC41H,42H分)6.(2.5 要求将A,B的语句是:?‘AB'B A、DA1 D ?‘AB'DW B、DA1 ?ABHB C、DA1 ?ABHW D、DA1 我的答案:2.5分A 此题得分:下面语句中有语法错误的语句是:7.(2.5分)?5HDB A、?ABCDHB、DW ?‘ABCD'C、DW ?‘AB'、DDD 我的答案:分2.5C 此题得分:(2.5分)寄存器间接寻址方式中,操作数存放在:8.?、通用寄存器A?、堆栈B?、程序计数器C?、主存单元D 我的答案: D 此题得分:2.5分 2.5(分)操作数地址存放在寄存器的寻址方式称为:9.?、变址寻址A ?、寄存器寻址B?、相对寻址C?、寄存器间接寻址D我的答案:此题得分:2.5分D 操作数的物理地址是:BYTE PTR[DI](10.2.5分)设DI=3942HDS=8225H,,指令NEG ?85B92H、A?86192H、B?BB690H C、?12169H、D我的答案:2.5分A 此题得分:下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是:分)(2.5 11.?DX,BXCX,,、 AAX . . . . ?DI,SI,、BBX,BP?DXBP,,C、SP,IP ?SSES,、DCS,DS, 我的答案:2.5分B 此题得分:分配的存,10H),3BUF5) 上述语句汇编后,为变量12.10H (2.5分)BUF DW DUP(3 ,DUP(2储单元字节数是:?80HA、 ?100HB、 ?124C 、?192、D我的答案:此题得分:2.5B 分13.发出的访问存储器的地址是:(2.5分)CPU?、物理地址A?、偏移地址B?、逻辑地址C?、段地址D我的答案:分A 此题得分:2.5]指令中的操作数的数据类型是:BYTE DEC PTR[BX14.(2.5分) ?、字A?、双字B?、字节C?、四字D我的答案:C 分此题得分:2.5BUFFER称为:,0AH 中,15.(2.5分)在语句BUFFER DB 01H?、符号A?、变量B?、助记符C?、标号D我的答案:B 此题得分:2.5分将数据5618H存放在存储单元中的伪指令是:16.(2.5分)?1856HDATA1 DW A、

汇编语言期末试卷复习(附答案)上课讲义

选择题 1. 已知X=78,Y= -83则[X+Y]补=() A.0F5H B.0A1H C.0FBH D.65H 2. MOV AX, ES:COUNT[DI] 源操作数的寻址方式是() A.基址寻址 B.立即寻址 C.变址寻址 D.基址变址寻址 3. 指令MOV BX, MASK[BP],若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么物理地址为() A.17500H B.16500H C.14500H D.13500H 4. 下列四组寄存器中,在段内寻址时可以提供偏移地址的寄存器组是() A.AX,BX,CX,DX B.BP,SP,IP,CS C.BX,BP,SI,DI D.BH,BL,CH,CL 5. 当执行指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是() A. 表示结果中含1的个数为偶数 B. 表示结果中含1的个数为奇数 C. 表示该数为偶数 D. 表示结果中低八位含1的个数为偶数 6. 下列传送指令中,有语法错误的指令是()。 A.MOV CS,AX B.MOV DS,AX C.MOV ES,AX D.MOV SS,AX 7. MOV SP,3210H PUSH AX执行上述指令序理后,SP寄存器的值是()。 A.3211H B. 320EH C.320FH D. 3212H 8. 设(DH)=20H,执行NEG DH指令后,正确的结果是() A.(DH)=20H CF=1 B.(DH)=20H CF=0 C.(DH)=0E0H CF=0 D.(DH)=0E0H CF=1 9. 执行下面指令序列后,结果是() MOV AL,82H CBW A.AX=0FF82H B.AX=8082H C.AX=0082H D.AX=0F82H

汇编语言上机操作及程序调试的方法

汇编语言上机操作及程序调试的方法第一节在IBM-PC机上运行汇编源程序所必备的软件 为了在IBM-PC机上运行汇编源程序,机器上必须有DOS操作系统环境,DOS系统盘上应有下列文件: EDIT 文件编辑程序 MASM 宏汇编程序 LINK 链接程序 DEBUG 调试程序 第二节在IBM-PC机上运行汇编源程序的步骤 当用户编制好汇编语言源程序之后,要在机器上运行,必须经过以下几个步骤: 1.用EDIT命令建立与修改汇编源程序文件(ASM文件) 源程序就是用汇编语言的语句编写的程序,必须以ASM为附加文件名。2.用MASM命令汇编源文件以产生相应的目标文件(OBJ文件) 3.用LINK命令连接目标文件以产生可执行文件(EXE文件) 4.调试、运行可执行文件

上机过程示意图如下: 汇编语言程序 编辑程序 汇编程序 连接程序 调试程序 有错吗? 运行程序 Y N 图2-1 汇编语言程序上机过程流程 第三节 DEBUG 程序调用及汇编语言程序调试方法 调试程序DEBUG 是DOS 支持的又一种系统软件,主要用于汇编语言程序的调试。汇编和连接过程只能查出源程序的语法错误,不能查出功能上的错误和程序不完善的地方。 一、DEBUG 程序的启动 DEBUG 程序有两种启动方法。 第一种启动方法:只要打入DEBUG 和回车键,就可以把它装入内存。但是这样启动只把DEBUG 程序本身装入内存并进入等待DEBUG 命令状态,还没有把要调试的程序装入内存。 第二种启动DEBUG 的程序的方法是一次相继装入DEBUG 程序和要调试的程序。打入的命令格式如下: DEBUG[d :][path]filename[.ext][parml]Lparm2] 其中的Filename 是要调试程序的文件名,可选项[d:][path]和[.ext]分别是要调试程序的所在盘符、路径和扩展名。可选项[parml]和[parm2]是DEBUG 程序为要调试程序准备的参数(一般不用)。 例 进入DEBUG 程序并装入要调试程序,要调试程序在A 驱动器中。其操

相关文档
相关文档 最新文档