汇编语言学习笔记

汇编语言学习笔记
汇编语言学习笔记

书目:汇编语言(第二版)

作者: 王爽

出版社: 清华大学出版社

第一章基础知识

存储单元

存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号.

微型机存储单元可以存储一个byte,即8个二进制位.一个存储器有128个存储单元,它可以存储128个byte.

CPU对存储器的读写

?CPU想对数据进行读写,必须和外部器件进行3种信息的交互:

?存储单元地址(地址信息)

?操作器件,读或写的命令(控制信息)

?读或写的数据(数据信息)

在计算机中专门有连接CPU和其他芯片的导线,通常称为总线.

从逻辑上又分为3类:地址总线、控制总线和数据总线.

地址总线

?CPU通过地址总线来指定存储器单元。地址总线的宽度决定了CPU的寻

址能力

?N称为CPU地址总线的宽度, CPU有N根地址线,可寻找2的N次方

个内存单元

控制总线

?控制总线的宽度决定了CPU对外部器件的控制能力

数据总线

?CPU通过数据总线和内存或其他器件之间进行数据传送,数据总线的宽

度决定了CPU和外界的数据传送速度

?8根数据总线一次可以传送一个直接.16根数据总线一次可传送两个字节.

第二章寄存器

8086/8088CPU的寄存器有4类:

数据寄存器:AX、BX、CX、DX (存放一般性的数据,又称通用寄存器)

指针及变址寄存器:SP、BP、SI、DI

段寄存器:CS、DS、SS和ES

控制寄存器:IP和Flags

AX (Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、除、输入/输出等操作;

BX称为基地址寄存器(Base Register),可作通用寄存器用,在计算存储器地址时,常用作基址存储器;

CX称为计数寄存器(Count Register),常用作循环计数器;在位操作中,要用CL来指明移位的位数;

DX称为数据寄存器(Data Register)。在进行双字的乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

CS:代码段寄存器

DS:数据段寄存器

SS:堆栈段寄存器

ES:附加段寄存器

IP:指令指针寄存器

CS和IP就指示了CPU当前要读取指令的地址

几条汇编指令

在写一条汇编指令或一个寄存器的名称时不区分大小写.

物理地址

CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址.

16位结构的CPU

运算器一次最多可以处理16位的数据;

寄存器的最大宽度为16位;

寄存器和运算器之间的通路为16位.

8086CPU给出物理地址的方法

地址加法器采用“物理地址= 段地址* 16 + 偏移地址”的方法合成物理地址

段的概念

一个段的最大长度位64KB

CS和IP

8086CPU的工作过程可以简要描述如下:

1)从CS:IP指向的内存单元处读取指令,读取的指令进入指令缓冲器;

2)IP=IP+所读取指令的长度,从而指向下一条指令;

3)执行指令,转到步骤1,重复这个过程.

修改CS、IP的指令

“jmp 段地址: 偏移地址”指令的功能为: 用指令中给出的段地址修改CS,偏移地址修改IP.

“jmp 某一合法寄存器”: 用寄存器的值修改IP.

第三章寄存器(内存访问)

内存中字的存储

字单元,即存放一个字型数据(16位)的内存单元.

一个字在内存中存放的时候占用2个地址连续的内存单元,字的低位字节存放在低地址单元,高位字节存放在高地址单元。

字所存放的低地址内存单元的地址作为字的起始地址,我们将起始地址为N 的字单元简称为N地址字单元.

任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他们看成两个内存单元,也可以看成一个地址为N的字单元.

DS和[address]

从内存单元到寄存器的格式是: “mov 寄存器名,内存单元地址”;

从寄存器到内存单元则是: “mov 内存单元地址,寄存器名”.

mov指令的形式还有:

mov 寄存器,数据mov 寄存器,寄存器

mov 段寄存器,寄存器mov 寄存器,段寄存器

mov 内存单元,段寄存器mov 段寄存器,内存单元

add,sub指令基本和mov相同

CPU提供的栈机制

8086CPU中,有两个寄存器,段寄存器ss和寄存器sp,栈顶的段地址放在ss中,偏移地址存放在sp中.

任意时刻,ss:sp指向栈顶元素.

入栈时,栈顶从高地址向低地址方向增长.

栈空,ss:sp指向栈空间最高地址单元的下一个单元.

push操作——单操作数指令

格式:push 源操作数

功能:将源操作数内容压栈

操作过程:

sp=sp-2,ss:sp指向当前栈顶前面的单元,以当前栈顶前面的单元作为新的栈顶;

将源操作数内容送入ss:sp指向的内存单元处,ss:sp此时指向新栈顶.

pop操作——单操作数指令

格式:pop 目的操作数

功能:将栈顶内容出栈,送入目的操作数

操作过程:

将ss:sp指向的内存单元的数据送入目的操作;

sp=sp+2,ss:sp指向当前栈顶下面的单元,以当前栈顶下面的单元作为新的栈顶.

弹栈后,数据依然存在,但已不在栈中,可写入新的数据进行覆盖.

栈段继承了段的属性:

长度小于等于64K

地址连续,起始地址为16的倍数

栈满的时候使用push,栈空的时候使用pop,都将发生栈顶超界的问题CPU对于栈顶超界不会检查

第四章第一个程序

汇编指令:在汇编语言源程序中,有对应的机器码,可以被编译为机器指令,最终为CPU所执行的指令;

伪指令:没有对应的机器指令,最终不被CPU执行的指令;

伪指令是由编译器来执行的

伪指令可以完成如数据定义、分配存储器、指示程序结束等功能

段定义伪操作:

格式:段名segment

段名ends

segment表示定义一个段的开始

ends表示一个段的结束

中间的部分是对应段的内容

assume伪操作:

功能:将某个段寄存器和程序中某个用段定义伪操作所定义的段相关联

格式:assumecs:codesg,ds:datasg

cs:codesg 告诉编译器把代码段的名字和cs寄存器相联系

程序结束伪操作

格式:end

功能:结束整个程序,出现在程序最后的语句中

在汇编语言中,以“;”开始此后该行的所有字符均为注释;

注释可以自占一行,也可以和指令同占一行;

注释只出现在汇编源程序中,经编译不会产生机器码;

注释可以用来说明程序或者语句功能,使程序更为清晰

一个程序结束后,将cpu的控制权交还给使它得以运行的程序的过程称为程序返回

程序返回的方式:

在程序末尾添加返回指令:

mov ax,4c00h

int 21h

第五章[BX]和loop指令

Loop指令

1)在cx中存放循环次数

2)loop指令中的标号所标识地址要在前面

3)要循环执行的程序段,写在标号和loop指令的中间即:

mov cx,循环次数

s: 循环执行的程序段

loop s

在Debug中跟踪用loop指令实现的循环程序

在汇编源程序中,数据不能以字母开头

Debug和汇编编译器masm对指令的不同处理

(1)在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用“[…]”来

表示内存单元,如果在“[ ]”利用一个常量idata直接给出内存单元的偏移地址,就要在“[ ]”的前面显式地给出段地址说在的段寄存器.

比如

mov al, ds:[0]

如果没有在“[ ]”前面显式地给出段地址所在段寄存器,比如

mov al,[0]

那么编译器masm将把指令中的“[idata]”解释为“idata”.

(2)如果在“[ ]”里用寄存器,比如bx,间接给出内存单元的偏移地址,则段地址

默认在ds中.当然,也可以显式地给出段地址所在的段寄存器.

段前缀

用于显式地指明内存单元的段地址的“ds:”“cs:”“ss:”“es:”,在汇编语言中称为段前缀.

一段安全的空间

DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序上的数据或代码.

第六章包含多个段的程序

在代码段中使用数据

end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方

start: 程序的第一条指令

end start

在代码段中使用栈

在描述dw的作用时,可以说用它定义数据,也可以说用它开辟内存空间

dw:define word

格式:[变量名] dw 数据1,数据2,…

功能:定义的是字型数据

说明:变量名可有可无,表明所定义的第一个字节的偏移地址

举例:data_word dw 100,100h

db:define byte

格式:[变量名] db 数据1,数据2,…

功能:定义的是字节型数据

举例:data_byte db 10,10h

将数据、代码、栈放入不同的段中

在代码段中使用数据和栈,存在的问题:

程序显得混乱

如果数据、栈和代码需要的空间超过64KB,就不能放在一个段中。解决:定义多个段,将数据、栈和代码放到不同的段中。

定义多个段的方法:和定义代码段的方法一样

对段内数据的引用

段名相当于一个标号,代表了段地址。

偏移地址看数据在段中的具体位置

代码段、数据段、栈段是人为的安排。

第七章更灵活的定位内存地址的方法

AND :逻辑与指令

格式:AND 目的操作数,源操作数

功能:按位进行与运算,结果放到目的操作数例如:mov al,01100011b

and al, 00111011b

执行后al=00100011b

OR :逻辑或运算

格式:OR 目的操作数,源操作数

功能:按位进行或运算,结果放到目的操作数例如:mov al,01100011b

or al,00111011b

执行后al=01111011b

NOT:逻辑非

格式:not 操作数

功能:按位进行非运算

例如:mov al,01100011b

not al

执行后,al=10011100b

XOR:逻辑异或(相同为0,不同为1)

格式:xor 目的操作数,源操作数

功能:按位进行异或运算

例如:mov al,01100011b

xor al,00111011b

执行后,al=01011000b

大小写转换问题

一个字母不管它原来是大写字母还是小写字母,将它二进制形式(ASCII码)的第五位置为0,它就必将变为大写字母;将它的第五位置为1,它就必将变为小写字母.

[bx+si]和[bx+di]

[bx+si]表示一个内存单元,偏移地址为(bx)+(si)

mov ax, [bx+si]

指令含义:

数学描述: (ax)= ((ds)*16+ (bx) + (si))

其他形式:mov ax,[bx][si]

[bx+si+idata]和[bx+di+idata]

[bx+si+idata]表示一个内存单元,偏移地址为(bx)+(si)+idata mov ax, [bx+si+idata]

指令含义:

数学描述: (ax)= ((ds)*16+ (bx) + (si) +idata)

其他形式:mov ax,[bx+200+si]

mov ax,[200+bx+si]

mov ax,200[bx][si]

mov ax,[bx].200[si]

mov ax,[bx][si].200

不同的寻址方式的灵活应用

[idata]用一个常量来表示地址,可用于直接定位一个内存单元

[bx]用一个变量来表示的内存地址,可用于间接定位一个内存单元

[bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元

[bx+si]用两个变量表示地址

[bx+si+idata]用两个变量和一个常量表示地址

一般来说,在需要暂存数据的时候,我们都应该使用栈.

第八章数据处理的两个基本问题

我们将使用两个描述性的符号reg来表示一个寄存器,用sreg表示一个段寄存器.

reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di

sreg的集合包括:ds、cs、ss、es

bx、si、di和bp

在8086CPU中,只有bx、si、di和bp这4个寄存器可以用在“[…]”中来进行内存单元的寻址

在“[…]”中,这4个寄存器可以单个出现,或只能以4种组合出现:bx和si、bx 和di、bp和si、bp和di

只要在“[…]”中使用寄存器bp,而指令中没有显式地给出段地址,则段地址就默认在cs中.

寻址方式小结

指令要处理的数据有多长

8086CPU的指令,可以处理两种尺寸的数据,byte和word

在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte.

push和pop指令只进行字操作

第三章 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.连接程序

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

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

执行上述两条指令后,正确的结果是( 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个字节数的总和并

指令系统和汇编语言程序的设计实验

第二章指令系统和汇编语言程序设计实验 本章实验主要包括指令系统和汇编语言程序设计两部分。采用软件模拟调试的方法, 目的在于通过这些实验可以使学生巩固所学知识, 加深对 MCS-51单片机部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。 第一节指令系统实验 实验一熟悉键盘操作及数传指令编程设计 一、实验目的 1.熟悉软件模拟调试的环境及键盘操作。 2.掌握汇编语言程序设计的方法,加深对指令的理解。 3.学会软件模拟调试和察看修改观察项的方法。 二、实验容 印证数据传送指令的功能、寻址方式以及 PC 指针、 SP 指针、 DPTR 指针、Ri 指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤 1.进入调试软件环境,输入源程序; 2.汇编源程序; 3.用单步方式运行程序; 4.检查并记录各寄存器和存储单元容的变化。 四、程序清单

1. 部 RAM 数据传送 需要查看的数据有 30H,31H,A,R0等。 ORG 0000H MOV R0,#30H MOV 30H,#45H MOV 31H,#46H MOV R2,30H MOV 02H,31H MOV A,#87H MOV 0E0H,30H MOV 30H,A MOV 31H,R0 SJMP $ END 2. 外部数据传送 需要查看的数据有外部数据存储器单元 2000H ,外部程序存储器单元2001H 。 ORG 0000H MOV A,#89H MOV DPTR,#2000H

MOVX DPTR,A INC DPTR CLR A MOVC A,A+DPTR SJMP $ ORG 2000H DB 44H DB 78H DB 67H END 3. 堆栈操作 需要查看的数据有 50H 、 51H 、 A 及 SP 指针和堆栈区中数据随 PUSH 和POP 指令执行后的变化情况和数据的存放次序等。 1 可用于保护现场和恢复现场的程序 ORG 0000H MOV SP,#5FH MOV 50H,#3BH MOV 51H,#2FH MOV A,#12H

完整word版,汇编语言期末考试试题及

汇编语言模拟试题及答案 一,单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.指令JMP FAR PTR DONE属于参考答案为:C A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 [解析]略 2.下列叙述正确的是参考答案为:C A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS 指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP 指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL 指令 D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用 JAE/JNB指令 [解析]对于无符号数和有符号数的比较都采用CMP指令; CMPS指令是串比较指令; 对两个无符号数的条件转移指令应是:JAE、JNB、JBE、JNA;对两个有符号数的条件转移指令应是:JGE、JNL、JLE、JNG。

3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是参考答案为:C A.12CSBH B.12B6BH C.12C59H D.12BFEH [解析]末字与首字相隔(128-1=)127个字,且每个字占用2个字节,因此末字单元的物理地址应为: 首字单元的物理地址+(128-1)×2 即12ABH×10H+00ABH+(128-1)×2=12C59H。 4.在下列指令的表示中,不正确的是参考答案为:C A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL [解析]当只有一个存储器操作数时,这个操作数的类型不明确,例如选项C 中的[BX],没有明确的说明访问该存储单元的类型,此时存储器操作数就必须需用类型说明,如 DEC BYTE PTR [BX]或DEC WORD PTR [BX] 但是在题目的选项C中,没有指出存储器操作数类型,所以该指令是不正确的;而其它选项中的指令均是正确的。5.在进行二重循环程序设计时,下列描述正确的是参考答案为:AA.外循环初值应置外循环之外;内循环初值应置内

汇编语言期末考试试题

一、单项选择题(本大题共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.在名字中不允许出现$

《汇编语言程序设计》期末复习题答案_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章-MCS-51系列单片机的指令系统和汇编语言程序范文

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

汇编语言期末考试试题及答案

汇编语言模拟试题及答案 一,单项选择题 (在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20 分) 1.指令JMP FAR PTR DONE 属于参考答案为:C A .段内转移直接寻址 B ?段内转移间接寻址 C .段间转移直接寻址 D ?段间转移间接寻址 [解析]略 2.下列叙述正确的是参考答案为:C A ?对两个无符号数进行比较采用CMP 指令,对两个有符号数比较用CMPS 指令 B ?对两个无符号数进行比较采用CMPS 指令,对两个有符号数比较用CMP 指令 C .对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL 指令 D .对无符号数条件转移采用JGE/JNL 指令,对有符号数条件转移用JAE/JNB 指令 [解析]对于无符号数和有符号数的比较都采用CMP 指令; CMPS 指令是串比较指令; 对两个无符号数的条件转移指令应是:JAE、JNB、JBE、JNA;对两个有符号数的条件转 移指令应是:JGE、JNL、JLE、JNG。 3.一个有128个字的数据区,它的起始地址为12ABH:00ABH ,请给出这个数 据区最末一个字单元的物理地址是参考答案为:C A . 12CSBH B . 12B6BH C. 12C59H D . 12BFEH [解析]末字与首字相隔(128- 1 =) 127个字,且每个字占用2个字节,因此末字单元的物理地址应为: 首字单元的物理地址+( 128 —1) >2 即12ABHX 10H + OOABH +( 128 —1) X2 = 12C59H。 4.在下列指令的表示中,不正确的是参考答案为:C A . MOV AL ,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D . MUL CL [解析]当只有一个存储器操作数时,这个操作数的类型不明确,例如选项C中的 [BX] ,没有明确的说明访问该存储单元的类型,此时存储器操作数就必须需用类型说明,如DEC BYTE PTR [BX] 或DEC WORD PTR [BX] 但是在题目的选项C 中,没有指出存储器操作数类型,所以该指令是不正确的;而其它选项中的指令均是正确的。 5.在进行二重循环程序设计时,下列描述正确的是参考答案为:A A .外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内 B ?外循环初值应置外循环之内;内循环初值应置内循环之内 C ?内、外循环初值都应置外循环之外

汇编语言指令系统.

汇编语言--指令系统整理总结--转贴 2007-05-1722:36 对于计算机软件专业的学生,适当的学习一些汇编语言知识,我认为很重要,有助于你对于计算机底层工作的了解,帮助你更好的理解计算机高级语言,汇编原理,也对于学习操作系统很有帮助... 近来自己在学汇编语言... 整理总结了常用的一些指令,认为对于学习汇编的龙友会有一些帮助以下内容均为个人整理...错误不当之处还望大家指出更正..谢谢..每条指令均按照 1、指令的汇编格式 2、指令的基本功能 3、指令的寻址方式 4、指令对标志位的影响 5、指令的特殊要求 这 5条内容的形式来对每条指令进行归纳总结.... [数据传送指令] 一、通用数据传送指令 1、传送指令 MOV (move 指令的汇编格式:MOVDST,SRC 指令的基本功能:(DST<-(SRC将原操作数(字节或字传送到目的地址。 指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式, 这个限制适用于所有指令。指令的执行对标志位的影响:不影响标志位。 指令的特殊要求:目的操作数 DST 和源操作数 SRC 不允许同时为段寄存器; 目的操作数 DST 不能是 CS,也不能用立即数方式。 2、进栈指令 PUSH (pushonto the stack

出栈指令 POP (popfrom the stack 指令的汇编格式:PUSHSRC ;POP DST 指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而 POP 指令又可将这些数据恢复。 PUSH SRC (SP<-(SP-2;(SP<-(SRC POP DST (DST<-((SP;(SP<-(SP 指令支持的寻址方式:push和 pop 指令不能不能使用立即数寻址方式。 指令对标志位的影响:PUSH和 POP 指令都不影响标志位。 指令的特殊要求:PUSH 和 POP 指令只能是字操作, 因此, 存取字数据后, SP 的修改必须是+2或者 -2; POP 指令的 DST 不允许是 CS 寄存器; 3、交换指令 XCHG (exchange 指令的汇编格式:XCHGOPR1,OPR2 指令的基本功能:(OPR1<->(OPR2 指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。 指令对标志位的影戏:不影响标志位。 指令的特殊要求:不允许使用段寄存器。 二、累加器专用传送指令 4、输入指令 IN (input 输出指令 OUT (output 指令的汇编格式:INac,port port<=0FFH

四川大学汇编语言程序设计20152016期末试题(附答案)

四川大学期末考试试题(闭卷) (2015——2016学年第 1 学期)A卷 课程号:课序号:课程名称:任课教师:成绩: 一、单项选择题(本大题共20小题,每小题1分,共20分)提示: 评阅教师得分 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在 下面的表格中。错选、多选或未选均无分。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1.以下寄存器中,哪一个不属于地址指针寄存器?( A ) (A)AX (B)BX (C)SI (D)DI 2.以下标志位中,哪一个不属于状态标志位?( C ) (A)CF (B)OF (C)IF (D)AF 3.以下寄存器中,哪一个用于指示堆栈的栈顶位置?( C ) (A)IP (B)SI (C)SP (D)BX 4.以下寄存器中,哪一个用于提供代码段的段基值?( C ) (A)SS (B)DS (C)CS (D)AX 5.以下指令中,不影响标志位的是哪一条?( D ) (A)INC (B)AND (C)SUB (D)XCHG 试卷编号:

二、多项选择题(本大题共5小题,每小题2分,共10分)提示:在 每小题列出的五个备选项中有二个至五个是符合题目要求的,请将其代码填写 在下表中。错选、多选、少选或未选均无分。 1 2 3 4 5 1.以下哪些指令会影响CF 标志位?( CD ) (A )INC (B )DEC (C )AND (D )SUB (E )JC 2.以下指令中,哪些会访问堆栈段?( ABDE ) (A )CALL (B )RET (C )JMP (D )PUSH (E )POPF 3.假设(AL )=92H ,CF=1,执行指令ADC AL,88H 后,以下结果哪些是正确的? ( ACE ) (A )(AL)=1BH (B )(AL)=1AH (C )CF=1 (D )OF=0 (E )ZF=0 4.假设(AL )=86H ,执行指令SAR AL,1后,以下结果哪些是正确的?( ACDE ) (A )(AL)=0C3H (B )(AL)=0CH (C )CF=0 (D )OF=0 (E )PF=0 5.以下指令中,哪些使用了存储器寻址方式?( BCD ) (A )ADD AL,02H (B )SUB BL,[0104H] (C )INC BYTE PTR [BX] (D )AND AL,[SI] (E )XOR BL,CL 三、判断改错题(本大题共5小题,每小题4分,共20分)提示:下 列各语句可能有语法错误,判断各语句正确与否,对于错误的语句,需解释其错误的原因,对于正确的语句,若做出正确判断则给4分,对于错误的语句,做出正确判断给2分,做出正确的解释再给2分。 1. NEG 145 X NEG 指令不能跟立即数 2. JZ BX X 条件转移指令JZ 不能寄存器寻址,只能跟标号 评阅教师 得分 评阅教师 得分

指令系统及汇编语言程序设计

第3章指令系统及汇编语言程序设计 一、简答题 1、80C51系列单片机的指令系统有何特点? 2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何? 3、访问特殊功能寄存器SFR可以采用哪些寻址方式? 4、访问内部RAM单元可以采用哪些寻址方式? 5、访问外部RAM单元可以采用哪些寻址方式? 6、访问外部程序存储器可以采用哪些寻址方式? 7、为什么说布尔处理功能是80C51单片机的重要特点? 8、对于80C52单片机内部RAM还存在高128字节,应采用何种方式访问? 9、试根据指令编码表写出下列指令的机器码。 (1)MOV A,#88H (2)MOV R3,50H (3)MOV P1.1,#55H (4)ADD A,@R1 (5)SETB 12H 10、完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指 令序列。 (1)将R0的内容传送到R1; (2)内部RAM单元60H的内容传送到寄存器R2; (3)外部RAM单元1000H的内容传送到内部RAM单元60H; (4)外部RAM单元1000H的内容传送到寄存器R2; (5)外部RAM单元1000H的内容传送到外部RAM单元2000H。 11、11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。试分析执行下列程序段 后上述各单元内容的变化。 MOV A,@R1 MOV @R1,40H MOV 40H,A MOV R1,#7FH 12、若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH, 试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指 出CY、AC、和OV的值。 (1)MOV A,@R0 (2)ANL 40H,#0FH (3)ADD A,R4 (4)SWAP A (5)DEC @R1 (6)XCHD A,@R1 13、若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的40H、41H、 42H单元中的内容各为多少? MOV A,50H MOV R0,A MOV A,#00H MOV @R0,A MOV A,3BH MOV 41H,A MOV 42H,41H 14、试用位操作指令实现下列逻辑操作。要求不得改变未涉及的位的内容。

汇编语言指令

汇编语言指令集 数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影响标志: C,P,Z,S,O ROR,ROL,RCR,RCL

汇编语言期末试题

一,单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.指令JMP FAR PTR DONE属于参考答案为:C A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 [解析]略 2.下列叙述正确的是参考答案为:C A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令[解析]对于无符号数和有符号数的比较都采用CMP指令; CMPS指令是串比较指令; 对两个有符号数的条件转移指令应是:JAE、JNB、JBE、JNA; 对两个无符号数的条件转移指令应是:JGE、JNL、JLE、JNG。 3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是参考答案为:C A.12CSBH B.12B6BH C.12C59H D.12BFEH [解析]末字与首字相隔(128-1=)127个字,且每个字占用2个字节,因此末字单元的物理地址应为: 首字单元的物理地址+(128-1)×2 即12ABH×10H+00ABH+(128-1)×2=12C59H。 4.在下列指令的表示中,不正确的是参考答案为:C A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL [解析]当只有一个存储器操作数时,这个操作数的类型不明确,例如选项C中的[BX],没有明确的说明访问该存储单元的类型,此时存储器操作数就必须需用类型说明,如DEC BYTE PTR [BX] 或DEC WORD PTR [BX] 但是在题目的选项C中,没有指出存储器操作数类型,所以该指令是不正确的;而其它选项中的指令均是正确的。 5.在进行二重循环程序设计时,下列描述正确的是参考答案为:A A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内 B.外循环初值应置外循环之内;内循环初值应置内循环之内 C.内、外循环初值都应置外循环之外 D.内、外循环初值都应置内循环之外,外循环之内 [解析]循环参数置初值,应在进入循环以前给出。

指令系统及汇编语言程序设计

指令系统及汇编语言程序设计 2.4 伪指令 伪指令本身不会产生可执行的机器指令代码,它仅仅是告诉汇编程序有关源程序的某些信息,或者用来说明内存单元的用途。伪指令在汇编过程中由汇编程序进行处理。 2.4.1 数据定义伪指令 数据定义伪指令用于定义变量的类型、给存储器赋初值或给变量分配存储单元。常用的数据定义伪指令有DB、DW和DD等。 格式: [变量名] 伪指令助记符数据表项 功能:定义一个数据存储区,其类型由所定义的数据定义指令而指定。 操作说明:方括号中的变量名为任选项,变量名后面不跟冒号“:”。数据表项可以包含多个数据之间用逗号分隔开。数据定义伪指令助记符有以下三种: (1) DB定义变量类型为字节(BYTE),DB后面的每个数据占一个字节。 (2) DW 定义变量类型为字(WORD),DW后面的每个数据占一个字,即两个字节。在内存中,低字节在前,高字节在后。 (3) DD 定义变量类型为双字(DWORD),后面的每个数据占两个字。在内存中,低位字在前,高位字在后。 例如,有下列数据定义语句 D1 DB 1,-12 D2 DW 1,2010H D3 DD 1,10203040H 数据表项中除了常数、表达式和字符串外,还可以是问号“?”,它仅给变量保留相应的存储单元,而不给变量赋初值。相同的操作数重复出现时,可用重复符号“DUP”表示。 其格式为: n DUP(初值[,初值,……]);n表示重复的次数,圆括号中为重复的内容。 下面是用问号或DUP表示操作数的例子: ARRAY DB 1000 DUP(0) VAR DW ?,? 2.4.2 符号定义伪指令 1. 赋值伪指令 格式:变量名 EOU 表达式 功能:将右边表达式的值赋给左边的变量。 操作说明:表达式可以是一个常数、符号、数值表达式或地址表达式。 需要注意的是:EQU伪指令不允许对同一符号重复定义。 EQU伪指令具体应用举例如下: CR EQU ODH ;定义CR为常数(回车的ASCII代码) TAB EQU TABLE-ASCII ;定义变量 DIS EQU 1024*768 ;定义数值表达式 ADR EQU ES:[DI+3] ;定义地址表达式 M EQU MOV ;定义助记符 2.等号(=)伪指令 格式:变量名=表达式 功能:将右边表达式的值赋给左边的变量。 操作说明:等号(=)伪指令的功能与EQU伪指令相仿,它可以对同一个名字重复定义。

汇编语言期末试卷复习(附答案)

选择题 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

MIPS 指令系统和汇编语言

第四章MIPS指令系统和汇编语言 1.考研预测:出题特点总结 本章是对统考408内容来说,本章是新增的章节。此外北航961大纲中制定了要考MIPS 指令集,从15年961真题来看MIPS是重中之重。但是今年计组并没有指定具体的教材,但大纲明确要求掌握MIPS指令集,所以还是建议考生将《计算机组成与设计:硬件/软件接口》中文版(原版第三版或第四版)作为本章的参考书籍。 本章大致内容是MIPS的基础知识,难度并不大。考生应该将重点放在MIPS指令集的基础上,考察C语言中的语句转换为对应的MIPS指令,所以需要熟练掌握C语言中一些语句对应的MIPS指令实现。本章出题很大可能就是C语言和MIPS汇编语言之间的转换,也可能涉及到第五章CPU指令流水线等内容。 2.考研知识点系统整理:梳理考点,各个击破 3.1 指令系统概述 机器指令要素 操作码:指明进行的何种操作 源操作数地址:参加操作的操作数的地址,可能有多个。 目的操作数地址:保存操作结果的地址。 下条指令的地址:指明下一条要运行的指令的位置,一般指令是按顺序依次执行的,所以绝大多数指令中并不显式的指明下一条指令的地址,也就是说,指令格式中并不包含这部分信息。只有少数指令需要显示指明下一条指令的地址。

指令执行周期 3.2 指令格式 一台计算机指令格式的选择和确定要涉及多方面的因素,如指令长度、地址码结构以及操

作码结构等,是一个很复杂的问题,它与计算机系统结构、数据表示方法、指令功能设计等都密切相关。 指令的基本格式 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下: ( 其中A1为第一操作数地址,A2为第二操作数地址,A3为操作结果存放地址。 这条指令的含义:(A1)OP(A2)→A3 式中OP表示双操作数运算指令的运算符号,如“+”或“–”等。 (2)二地址指令

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

高级语言、汇编语言及机器语言的区别

计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。 低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如目前流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言,中文版的C语言习语言等等,这些语言的语法、命令格式都不相同。 高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。高级语言、汇编语言和机器语言都是用于编写计算机程序的语言。 高级语言程序“看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。 机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统 它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如,操作码字段和地址码字段,其中操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。 汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编.

相关文档
最新文档