计算机组成与汇编语言第六章笔记整理.docx

上传人:b****5 文档编号:12390508 上传时间:2023-04-18 格式:DOCX 页数:20 大小:27.48KB
下载 相关 举报
计算机组成与汇编语言第六章笔记整理.docx_第1页
第1页 / 共20页
计算机组成与汇编语言第六章笔记整理.docx_第2页
第2页 / 共20页
计算机组成与汇编语言第六章笔记整理.docx_第3页
第3页 / 共20页
计算机组成与汇编语言第六章笔记整理.docx_第4页
第4页 / 共20页
计算机组成与汇编语言第六章笔记整理.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算机组成与汇编语言第六章笔记整理.docx

《计算机组成与汇编语言第六章笔记整理.docx》由会员分享,可在线阅读,更多相关《计算机组成与汇编语言第六章笔记整理.docx(20页珍藏版)》请在冰豆网上搜索。

计算机组成与汇编语言第六章笔记整理.docx

计算机组成与汇编语言第六章笔记整理

计算机组成与汇编语言笔记整理

第6章:

汇编语言

●本章要点

●6.1汇编语言语句

●6.1.1汇编语言语句格式

指令语句的格式:

[标号:

]指令助记符[操作数[,操作数]][;注释]

伪指令语句的格式:

[名字]伪指令助记符[操作数[,操作数]][;注释]

●6.1.2伪指令运算符和操作数

1.伪指令运算符

(1)算术运算符

算术运算包括:

加(+)、减(-)、乘(*)、除(/)、模除(MOD)。

其中,模除(MOD)表示两整数相除后取余数。

例6.1已知符号常量NUM=51,求下列指令的汇编结果(表达式的值):

MOVAX,NUM/9

MOVAX,NUMMOD9

MOVAX,NUM*5

汇编的结果是:

MOVAX,5

MOVAX,6

MOVAX,255

(2)逻辑运算符和移位运算符

逻辑运算包括:

逻辑乘(AND)、逻辑加(OR)、按位加(XOR)和逻辑非(NOT)。

逻辑运算是按位进行的。

移位运算包括:

右移(SHR)和左移(SHL),表示将二进制常量右移或左移运算符右边所规定的位数,所空出的位均补0。

例6.2求下列指令汇编的结果。

MOVAL,4CHSHL2

MOVAL,NOT0FFH

ANDAL,4CHAND0F0H

XORAL,4CHXOR0FFH

汇编的结果是:

MOVAL,30H

MOVAL,0

ANDAL,40H

XORAL,0B3H

(3)关系运算符

关系运算包括:

相等(EQ)、不等(NE)、小于(LT)、大于(GT)、小于等于(LE)和大于等于(GE)。

它们的运算结果是两个特殊的常量,若关系不成立,结果为0;否则结果为0FFH或0FFFFH。

例6.3求下列指令汇编的结果。

MOVAL,4CHEQ2

MOVAL,4CHGT1

汇编的结果是:

MOVAL,0

MOVAL,0FFH

(4)返回值运算符

①取类型算符TYPE

格式为:

TYPE变量或标号

如果TYPE后面跟的是变量,则汇编程序将回送该变量类型的字节数:

字节类型为l,字类型为2,双字类型为4,4字类型为8,10字节类型为10。

如果是标号,则汇编程序将回送代表该标号类型的数值:

NEAR型为-1(0FFFFH),FAR型为-2(0FFFEH)。

②取变量所含的数据存储单元个数算符LENGTH

格式为:

LENGTH变量

返回利用DUP定义的数组中元素的个数,即重复操作符DUP前的整数n值。

如果变量定义语句中没有使用DUP,则返回1。

如果嵌套使用了DUP,则只返回最外层的重复数。

③取变量所含的数据存储区大小算符SIZE

格式为:

SIZE变量

它的取值为该变量所占数据存储区的字节数。

SIZE算符与LENGTH算符的关系是:

LENGTH变量×TYPE变量,即等于上述两种算符取值的乘积。

④取偏移地址算符OFFSET

格式为:

OFFSET变量或标号

它的取值为其后变量或标号的偏移地址。

⑤取段地址算符SEG

格式为:

SEG变量或标号

它的取值为其后变量或标号所在段的段地址。

(5)属性运算符

①类型运算符PTR

格式为:

类型PTR地址表达式

其中类型字段表示所赋予的新的类型属性,对于变量可以是BYTE、WORD、DWORD,对于标号可以是NEAR、FAR。

例如指令:

MOV[BX],0FFH

两操作数类型均不明确,应写成:

MOV[BX],WORDPTR0FFH

②段操作符“:

格式为:

段寄存器名:

地址表达式

或:

段名:

地址表达式

③短转移算符SHORT

例如:

JMPSHORTTAG

④定义类型算符THIS

格式为:

THIS类型

⑤字节分离算符HIGH和LOW

格式为:

HIGH/LOW常量或地址表达式

运算符的优先级别,从高到低排列如下:

①括号的项。

②LENGTH,SIZE。

③PTR,OFFSET,SEG,TYPE,THIS及段操作符“:

④HIGH,LOW

⑤*,/,MOD,SHL,SHR

⑥+,-

⑦EQ,NE,LT,LE,GT,GE。

⑧逻辑运算:

NOT,AND,OR,XOR。

⑨SHORT。

2.操作数

(1)数值表达式

①常量

可分为数值常量和符号常量。

②数值表达式

由常量、符号常量以及运算符组成,其运算结果为数值常量。

汇编语言允许对常量进行三种类型的运算:

算术运算、逻辑运算、关系运算。

(2)地址表达式

由变量、标号、常量、寄存器(BP、BX、SI、DI)间址的内容(用寄存器名加方括号表示)和运算符组成。

地址表达式的值一般是偏移地址具有段、偏移地址及类型三个属性。

地址表达式的运算符可以使用数值表达式的运算符,也可以使用属性运算符和返回值运算符。

例EQU20H

BDB10H,30H

试分析6.5设符号常量A和变量B定义如下:

A下列指令的源操作数。

①MOVAX,A+1

数值表达式,执行后寄存器AX的值为21H。

②MOVBL,B+1WORDPTRB

地址表达式,执行后,寄存器BX的值为3010H。

地址表达式,执行后,寄存器BL的值为30H。

③MOVBX,

6.2汇编语言伪指令

6.2.1符号定义伪指令

1.等价伪指令

语句格式:

符号名EQU表达式

功能:

用来为常量、表达式以及其它各种符号定义一个等价的符号名,但它并不申请分配存储单元。

用法①:

定义一个常量符号。

例6.6以下是用EQU定义的符号常量:

AEQU5

BEQUA*3+2

CEQUB*3+2

用法②:

与特殊运算符PTR或THIS连用,可以给变量或标号定义新的类型属性并重新命名,但其段属性和偏移地址属性不变。

例6.7某程序的数据段中有如下几条伪指令语句,试分析各变量的属性。

DATASEGMENT

DDBUFEQUTHISDWORD

BUFDB100DUP(?

DWBUFEQUWORDPTRBUF

DATAENDS

...

FIRSTEQUTHISFAR

用法③:

为较复杂的表达式及源程序中的任何符号定义一个替换名。

例如:

MOVEEQUMOV

COUNTEQUCX

SUM(X,Y)EQUX+Y

则下列指令等价于:

MOVEAX,BX;等价于:

MOVAX,BX

MOVCOUNT,100;等价于:

MOVCX,100

ADDAX,SUM(30,50);等价于:

ADDAX,80

语句格式:

符号名=表达式

功能:

该语句的功能与EQU语句类似,但有一个区别:

EQU不能重复定义符号名,而等号语句能对所定义的符号名再重新定义,给它赋予新的值。

同一符号多次定义时,以最后一次定义的值为准。

2.等号伪指令

语句格式:

符号名=表达式

功能:

该语句的功能与EQU语句类似,但有一个区别:

EQU不能重复定义符号名,而等号语句能对所定义的符号名再重新定义,给它赋予新的值。

同一符号多次定义时,以最后一次定义的值为准。

3.定义符号伪指令

语句格式:

变量名或标号LABEL类型

功能:

为当前存储单元定义一个指定类型的变量或标号。

它的功能与语句“变量名或标号EQUTHIS类型”的功能相似。

6.2.2数据定义伪指令

语句格式:

[变量名]数据定义伪指令操作数1

[,操作数2,...][;注释]

功能:

定义一数据存储区,其类型由所使用的数据定义伪指令指定。

1.变量名

变量名是可选的,需要时由用户自己命名。

它是该数据区的符号地址,也是其中第一个数据项的偏移地址。

程序可以通过变量名引用其中的数据。

2.数据定义伪指令

常用的数据定义伪指令有DB(字节)、DW(字)、DD(双字)、DQ(8字节)、DT(10字节)。

3.操作数

数字常量及数值表达式。

字符串常量。

在汇编语言中用单引号括起来,其值为各字符的ASCII码值。

地址表达式。

此时操作数为地址符号,若只定义偏移地址,则使用DW伪指令;若定义双字长地址指针(16位偏移地址和16位段地址),则使用DD伪指令,其中低字存放偏移地址,高字存放段地址。

当操作数为“?

”时,表示为变量预留空间而不赋初值。

nDUP(操作数,……)。

若要对某些数据重复多次,可以使用这种格式。

其功能是把()中的内容复制n次。

DUP可以嵌套。

例6.8画出以下数据定义伪指令定义的数据存储形式。

CRDB0DH

LFDB0AH

DATADW100,100H,-5

例画出以下数据定义伪指令定义的数据存储形式。

XDB12H,3DUP(0FFH)

YDB2DUP(10H,3DUP(‘AB‘,?

))

6.2.3其他伪指令

0.汇编地址计数器$

符号$:

当前地址

例:

X1DB‘Goodmorning!

CNTEQU$-X1

常利用$求某个变量的长度(字节数)

1.置汇编地址计数器伪指令ORG

语句格式:

ORG数值表达式

功能:

将汇编地址计数器设置成数值表达式的值。

例6.9指出下列程序段中变量BUF和NUM的偏移地址是多少?

ORG10;设置$的值为10

BUFDB‘ABCD’;变量BUF的偏移地址为10

ORG$+6;$的值增加6

NUMDW50;NUM的偏移地址为20

2.偶地址伪指令EVEN

偶地址伪指令EVEN的功能是把地址计数器调整为偶数。

在汇编数据定义语句或指令语句时,如地址计数器现行位置为奇数,则在汇编的目标代码中自动插入一条无操作指令NOP,如地址计数器已为偶数,那么汇编程序不作任何操作。

EVEN伪指令的使用格式为:

EVEN

3.INCLUDE伪指令

INCLUDE伪指令把指定的文件插入正在汇编的源程序中,作为源程序的一个组成部分。

INCLUDE伪指令的使用格式为:

INCLUDE源程序文件名

4.PUBLIC伪指令

PUBLIC伪指令用于定义全局符号,包括标号、FAR类型的过程名、变量名、常数名等。

PUBLIC伪指令的使用格式为:

PUBLIC符号1,符号2,……

5.EXTRN伪指令

EXTRN伪指令用于告诉汇编程序,本语句说明的这些符号没有在本程序模块中定义,是由其它程序模块定义的,且在定义模块中用PUBLIC伪指令说明。

EXTRN伪指令的使用格式为:

EXTRN符号1:

类型,符号2:

类型,……

6.TITLE伪指令

TITLE伪指令是给程序指定一个标题,以便在列表文件中每一页的第二行都显示这个标题文本。

TITLE伪指令使用格式为:

TITLE文本

6.3汇编语言程序结构

6.3.1汇编语言程序的一般结构

例6.10编程实现123+456→SUM单元的功能。

要求使用﹒EXE文件结构。

汇编源程序1:

STSGSEGMENTSTACK‘S’;行1

DW32DUP(?

);行2

STSGENDS;行3

DATASEGMENT;行4

ADW123;行5

BDW456;行6

SUMDW?

;行7

DATAENDS;行8。

CODESEGMENT;行9

MAINPROCFAR;行10

ASSUMECS:

CODE,DS:

DATA,SS:

STSG

;行11

PUSHDS;行12

XORAX,AX;行13

PUSHAX;行14

MOVAX,DATA;行15

MOVDS,AX;行16

MOVAX,A;行17

ADDAX,B;行18

MOVSUM,AX;行19

RET;行20

MAINENDP;行21

CODEENDS;行22

ENDMAIN;行23

1.段定义伪指令

语句格式:

段名SEGMENT[定位方式][组合方式][‘类别’]

...

段名ENDS

功能:

定义一个以SEGMENT伪指令开始,以ENDS伪指令结束,以“段名”命名的存储器段。

2.ASSUME伪指令

语句格式:

ASSUME段寄存器:

段名[,段寄存器:

段名...]

功能:

该语句一般出现在代码段中,且在段的开始出现,用来设定段寄存器与段之间的对应关系。

在程序中使用这条语句的话,宏汇编程序就将这些段作为当前可访问的段处理。

3.过程定义伪指令

语句格式:

过程名PROC属性

...

过程名ENDP

过程名是子程序入口的符号地址,可以是任意合法的字符串。

属性有近属性(NEAR)和远属性(FAR),段内调用的过程使用NEAR属性,段间调用的过程使用FAR属性。

过程是程序的一部分,通常也叫子程序。

一个过程可以被其它程序调用,它的最后一条语句总是返回指令。

过程调用和返回指令可用CALL和RET指令。

4.程序结束伪指令

语句格式:

END<表达式>

源程序结束伪指令是源程序的结束标志,汇编程序汇编到该伪指令结束,通常为源程序的最后一条语句。

其中表达式为可选项。

表达式必须为一存储器地址,该地址为程序的启动地址,即该程序在计算机上运行时第一条被执行指令的地址。

如果不带表达式,表明该程序模块不能单独运行,而作为子模块让其它程序调用。

6.3.2段寄存器的装填

初始化后,DS和ES并没有指向用户自己的数据区,而是指向PSP的段基址。

但在用户程序运行过程中,DS应指向用户程序自己的数据段以便访问其中的内容,例如上例中访问A、B和SUM变量。

同理,ES也应设置为正确的位置。

所以,编程人员应在程序中用指令为DS和ES寄存器赋值。

因为立即数不能直接传送段寄存器,所以用以下语句为DS赋值:

MOVAX,DATA

MOVDS,AX

如果程序中用到了附加段,也要在程序中用同样的方法为它们赋值。

6.3.3程序返回操作系统

1.利用PSP中的INT20H返回DOS

MAINPROCFAR

PUSHDS

XORAX,AX

PUSHAX

RET

MAINENDP

2.利用DOS的4CH系统功能调用返回DOS

目前返回DOS通常使用4CH系统功能调用,这种方法实现起来比较简单,可用以下语句实现:

MOVAH,4CH

INT21H

源程序2:

STSGSEGMENTSTACK‘S’

DW32DUP(?

STSGENDS

DATASEGMENT

ADW123

BDW456

SUMDW?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STSG

START:

MOVAX,DATA

MOVDS,AX

MOVAX,A

ADDAX,B

MOVSUM,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

第6章作业

P154

6.36.46.56.86.10

6.2*6.6*6.9*6.11*6.12*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1