收藏 分享(赏)

第4章 汇编语言程序设计.doc

上传人:dzzj200808 文档编号:2722187 上传时间:2018-09-26 格式:DOC 页数:27 大小:205.50KB
下载 相关 举报
第4章 汇编语言程序设计.doc_第1页
第1页 / 共27页
第4章 汇编语言程序设计.doc_第2页
第2页 / 共27页
第4章 汇编语言程序设计.doc_第3页
第3页 / 共27页
第4章 汇编语言程序设计.doc_第4页
第4页 / 共27页
第4章 汇编语言程序设计.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、第四章 汇编语言程序设计(assembly language programming)4.1 汇编语言(assembly language)一概述汇编语言:一种符号语言,它用助记符表示指令的操作码和操作数,用标号或符号代表地址、常量和变量,与机器语言几乎一一对应汇编:把汇编语言源程序翻译成机器语言目标程序的过程汇编语言源程序 手工汇编或汇编程序 机器语言目标程序汇编程序:用来完成汇编工作的程序,有小汇编 ASM宏汇编 MASM动态调试程序 DEBUG二汇编语言的语句格式: 名称 指令助记符 操作数 ;注释带方括号的项有时可没有,注释项完全可以没有每个部分用空格分开每行最多可有 132 个字符,

2、但最好不要超过屏宽 80语句可分成指令性语句和指示性语句(伪指令语句)指令性语句汇编后可生成机器码标号: 指令助记符 操作数 ;注释指示性语句指示汇编程序处理一些工作名称 伪指令(指示符) 操作数 ;注释1名称(或称标识符)给指令或存储单元地址起的名字,由字母、数字、字符组成字母:AZ ,az 数字:09字符:可打印 ( ) ; , : ? (非打印 空格 制表符 TAB 回车 换行)(界符: , ; : ( ) ? 界符用来表示某个标志的结束) 数字不能作名称的第一个字符,圆点 仅能作第一个字符 保留字不能作标识符(、?是保留字,与其它字符组合除外) 名称最长为 31 个字符 当名称后跟冒号

3、,表示该名称是其后指令的标号,代表该指令的开始地址,其他指令可以用该标号作为转移地址 当名称不跟冒号,它可能是标号或变量名,伪指令前的名称不跟冒号冒号隐含 NEAR 属性,例:供段内调用写成 OUTPUT:OUT DX ,AL供段间调用写成 OUTPUT OUT DX ,AL2指令助记符8086/8088 指令,也可以是伪指令,如果指令有前缀(LOCK、REP 等)则前缀和指令用空格分开3操作数指令执行的对象,可能有一、二个或没有名称 指令助记符 操作数 注释RET ;返回(无操作数)COUNT: INC CX ;CX 加 1(1 个操作数)MOV AL,BL ;ALBL(2 个操作数)伪指令

4、可有多个操作数COST DB 3,4,5,6,7,8 ;(6 个操作数,用逗号分开)操作数可以是常数、寄存器名、标号、变量、表达式,MOV AX,BP+4;(第二个操作数为表达式)4注释可选项,使程序易读,汇编时不作处理注释前面要加分号,它可位于操作数之后,也可位于行首三常量与变量1常量,也叫常数,没有属性的纯数,汇编时已确定的值数字常量为 065535 中的数(16 位寄存器使用,伪操作可定义32 位) ,进制加后缀说明,十进制加 D(可省) ,二进制加 B,八进制加 Q,十六进制加 H,若十六进制第一位为字母,则前头应加 0字符和字符串叫串常量,是 ASCII 码字符串,必须加单(或双)引

5、号例:A , “ABC”,汇编后变成 41H,414243H2变量,用于表达数值(或串)的标识符,有三个属性 段属性(SEGMENT ) 偏移地址属性(OFFSET) 类型属性(TYPE) ,用 DB、DW、DD 定义4.2 伪指令(pseudo-instruction)一符号定义伪指令1等值 EQU格式:符号名 EQU 表达式用来给符号定义一个值,程序中出现该符号就用其值代替,EQU 只能定义一次DATA EQU 1234 ;代表一个数XYZ EQU ALPHASI ;代表一个地址2等号 =格式:符号名 = 表达式意义与 EQU 一样,但程序中可重新定义符号的值EMP = 6 ;EMP 代表

6、 6EMP =EMP + 1 ;EMP 现在代表 73解除 PURGE格式:PURGE 符号名(符号 1,符号 2,符号 n)用于解除所定义的符号使该符号在以后的定义中有效例:原定义 TAB EQU 5可用 PURGE TAB 来解除然后可重新定义 TAB EQU 10二数据定义伪指令用于预置存储器或定义变量1定义字节 DB格式:变量名称 DB 表达式例:DATA1 DB 2,3,4,5;从 DATA1 单元开始存放 4 字节数据2定义字 DW格式:变量名称 DW 表达式例:TAB DW 1234H;TAB 单元内容为 34H, TAB+1 单元内容为 12H3定义双字 DD格式:变量名称 D

7、D 表达式每个数据二字(四字节)低位部分在低地址,高位部分在高地址用 DB/DW/DD 定义的数每行不得超过 16 项,超过 16 项必须换行DB/DW/DD 用法SUM DB ? ;给 SUM 单元分配一个字节,内容未定TAB DB 20 DUP( 0) ;给 TAB 开始单元分配 20 字节,内容为0TIME DW 100 DUP(?) ;给 TIME 开始单元分配 100 字,内容未定ADDR DD TABLE ;TABLE 的地址(双字)给 ADDR例:DATA SEGMENTORG 100HTABLE DB 1,2,3,4ADDR DD TABLEDATA ENDS假设汇编后 DS=

8、13A2H(如果 ADDR 用 DW 定义,只得偏移量)(如果 TABLE 是变量,ADDR 得地址,是常量,ADDR 得数值)LETTER DB ABCDEFG;将字符串以 ASCII 码形式填入100H 01101H 02102H 03103H 04104H 00105H 01106H A2107H 13LETTER 开始的内存HIS DB 3 DUP(WELCOME! ,0DH,0AH) ;从 HIS 单元开始重复 3 次存放 WELCOME!和回车换行符4标号 LABEL格式:标号名 LEBEL 类型标号用于说明可执行代码在汇编语言程序中的位置,即符号地址,供调用和转移之用标号有三个属

9、性段属性偏移量属性距离属性(即格式中的类型):NEAR (近程)和 FAR(远程)NEAR:本标号为段内标号,调用本标号只提供偏移地址,段基址为当前代码段FAR:本标号为段间标号,调用本标号提供偏移地址和段基址一个具有 NEAR 属性的标号也可用标号加冒号作后缀,并排列在代码行的开头来隐含如 AGAIN LABEL NEARXOR AX,BUFFBX可写成 AGAIN:XOR AX,BUFFBX例:ROOT LABEL NEAR ;以下程序所用的 ROOT 标号是段内属性COMP PROC NEAR ;以下程序所用的过程下的标号是段内属性TIME PROC FAR ;以下程序所用的过程下的标号

10、是段间属性三运算符1算术运算符+、-、*、/、MOD 即加、减、乘、除、除法取余数(如 19 MOD 7=5)操作数是数字,结果也是数字存储器地址运算时只有加减,例 TAB+2、BETA-5 等2逻辑运算符AND、OR、XOR、 NOT 即与、或、异或、非操作数是数字,结果也是数字例:AND BX,DAT AND 0FEH3关系算符EQ、NE、LT 、GT、LE、GE 即相等、不等、小于、大于、小于等于、大于等于若关系是假结果为 0,若关系是真结果为 0FFFFH例:MOV BX,PAD LT 3则 PAD 的值小于 3 时,汇编成 MOV BX,0FFFFH否则,汇编成 MOV BX,04分

11、析运算符可把存储器操作数分解成它的组成部分,如段值、段内偏移量、类型5合成算符由已存在的存储器操作数生成一个段值与偏移量相同,而类型不同的新的存储器操作数以下讨论分析算符和合成算符1取段基址 SEG它加于一个变量或标号之前,回送段基址,例:ASSUME CS:SEG BEGIN ;令 CS 为 BEGIN 程序段段基址MOV AX,SEG VARN ;将 VARN 的段基址送 AX2取偏移量 OFFSET它加于一个变量或标号之前,取其偏移量,例:MOV BX,OFFSET SUM ;将 SUM 的段内偏移量存入 BX3取类型码 TYPE它加于一个变量或标号之前,取其类型代码DB DW DD D

12、Q DT NEAR FAR1 2 4 8 10 -1 -2例:NG1 DB A , D,3NG2 DW 88,265MOV AL,TYPE NG1 ;NG1 定义字节,AL 1MOV AL,TYPE NG2 ;NG2 定义字,AL 24取长度 LENGTH它加于一个变量之前,取分配给变量的项数例:TAB DB 150 DUP(?) ;150 项,150 字节FUM DW 150 DUP(?) ;150 项,300 字节则,MOV CX,LENGTH TAB ;CX 150MOV AX,LENGTH FUM ;AX 150注意:LENGTH 返回的存储区必须用 DUP()来定义,否则返回为 15

13、取字节数 SIZE它加于一个变量之前,取回变量所占字节总数,有SIZE = LENGTH * TYPE由上例,LENGTH TAB = 150,TYPE TAB = 1LENGTH FUM = 150,TYPE FUM = 2可知: SIZE TAB = 150SIZE FUM = 300以上 5 个叫数值返回算符6类型指示 PTR格式:类型 PTR 地址表达式表示 PTR 右边的(存储器)操作数是左边的类型,有:BYTE、WORD、DWORD、NEAR、FAR 例:INC BYTE PTR BX ;将 BX 指向的单元字节加 1MOV WORD PTR DI,99 ;立即数 99 送 DI

14、指向的字中JMP NEAR PTR FOK ;以近程方式跳转到 FOK(只取FOK 偏移地址)7指定符 THIS(合成算符)用于定义当前所指单元中的类型格式:THIS 类型/距离经 THIS 定义过的标号具有当前汇编段、偏移量和所规定的类型或距离等属性,例:FOOB EQU THIS BYTE;下面的字类型变量 FOOW 在这里指定为字节型 FOOBFOOW DW 120 DUP(?)定义后,对同一数据块(FOOB 和 FOOW 有相同的段和段内偏移量)有两种类型访问 FOOB 时为字节操作,访问 FOOW 时为字操作FOOB/FOOWFOOB+3FOOW+4ADD AL,FOOB3 ;将数组

15、第四字节与 AL 相加MOV AX,FOOW4将数组第五六字节组成的字送 AX也可以这样来构成 FOOB:FOOB EQU BYTE PTR FOOW又例:DATAF EQU THIS FARDATAN:MOV AX,FOO这时 JMP DATAN 为近程转移JMP DATAF 为远程转移8段修改符 :用于对某一地址表达式指定临时段基址,如MOV AX,ES : BX;指定 ES 为 BX 的段基址,对当前指令有效9短程符 SHORT与 NEAR、FAR 功能类似,位移量一字节范围 -128+127,对应一条短转移指令例:JMP SHORT LAB;转移到标号 LAB 的地址10方括号 表示操

16、作数(加方括号)是一个地址偏移量,不是数值格式:表达式 或者 表达式 例:MOV BX,AX ;将 AX 内容送 BX 所指单元MOV BX+7, AX ;将 AX 内容送 BX+7 所指单元MOV AX,BXSI ;将 BX+SI 所指单元内容送 AX11取高/低字节 HIGH/LOW用来分离常量的高/低字节,对存储器操作数无效例:DATA EQU 789AHMOV AL,HIGH DATA ;AL=78HMOV AL,LOW DATA ;AL=9AH四段定义伪指令1SEGMENTENDS格式:段名 SEGMENT 定位类型 组合类型 类别名段名 ENDS段名定位类型(Align) ,给出实

17、际段地点的种类或段长度的信息PARA 段起始地址从一个节( paragraph)的边界开始BYTE 段地址可从任意绝对地址开始WORD 段地址从任意一个字的边界开始PAGE 段地址从某一页的边界开始(一页等于 256 字节)INPAG 段长度小于一页组合类型(Combine) ,又称联合类型,程序中各程序段的连接和定位方法PUBLIC 将段名相同的程序段(亦称模块)依此紧密连接,但彼此不相互覆盖COMMON 将段名相同的程序段连接,各段都从同一地址开始AT 表达式 段定位在由表达式(结果必须是常数)所指定的节的边界上例:AT 1234H,则段地址被定位在物理地址为 12340H 处,如果希望从

18、 12345H 开始,则在 SEGMENT 命令的下一行写上 ORG 5AT 不能向前引用STACK 表示这个段是运行期间的堆栈段MEMORY 该段是相互连接的几个段中地址最高的段若没有说明联合类型,则本段与其他段无关,即 NONE,不和别的段连接类别名 (Class) ,也叫组名,加单引号,汇编后类别名相同的程序段代码集中在一起定位,形成一个统一的物理段,类别名可自定,约定的有 CODE(代码段) 、DATA(数据段) 、STACK(堆栈段) 、CONST(常数) 、MEMORY(存储)等2ASSUME段寄存器说明伪指令,指明所定义的段名所使用的段寄存器(告诉汇编程序在运行期间通过哪一个段寄

19、存器寻址才能找到所要的指令和数据) ,本语句一般在定义的代码段中第一条出现格式:ASSUME 段寄存器:段名 ,例: ASSUME CS:CODE,DS:DATA ;用 SEGMENTENDS 定义ASSUME CS:SEG KGF,DS:SEG BEGIN;由算符定义ASSUME ES:NOTHING ;用关键字定义,表示不使用 ES(取消 ES 段寄存器)(保留字 NOTHING 在这里作为一个段名参数,ASSUME NOTHING 表示取消所有段寄存器,各个段寄存器只能在指令性语句中由 MOV 指令赋值)ASSUME 只是设定段寄存器与逻辑段的对应关系,并没给段寄存器装入实际值,所以程序

20、中必须对 DS、ES、SS 赋值,而CS 由系统赋值3ORG定点伪指令(段内定位) ,用以确定下一条指令(或变量)在当前段中的偏移地址格式:ORG 表达式表达式以 65536(64K )为模计算,超过 64K 则取其余数本语句前未定义过的变量不可出现在表达式中,表达式可包含(程序计数器当前值) 如:ORG OFFSET +1000表达式必须为正值,若为负值,就会从当前段的地址高端开始表达式最好不要写成 OFFSET -1000,以免把汇编过的 1000 个字节覆盖掉ORG 指令不能带标识符,如 START:ORG 0 和 SKIP ORG 100 都是错的例:CODE SEGMENT ;段起始

21、ORG 100H ;本程序代码从偏移地址 100H开始装入ASSUME CS:CODE ;装入代码段地址到 CS 中START:IN AL,30H ;程序段SHL AL, 1OUT 32H,ALJMP STARTCODE ENDS ;程序段结束END START ;汇编结束例:DATA SEGMENT ORG 50HDAT DW 1,2,$+1DATA ENDS注意 DAT 不能定义为字节 ,否则与$不匹 配五过程定义伪指令格式:过程名 PROC 属性 过程体RET过程名 ENDP过程名不可缺省,它和标号一样有三个属性:段属性、偏移地址属性、距离属性距离属性在 PROC 后指定,有 NEAR

22、和 FAR,如果希望过程能让别的程序调用,则必须是 FAR 属性一个过程允许多个入口,入口处有标号,标号要说明距离属性例:延时 100ms 子程序DELAY PROC ;隐含 NEARMOV BL,10 4TDLY1: MOV CX,2801 ;内循环延时 10ms 10TWAIT0: LOOP WAIT0 9/5TDEC BL 2TJNZ DLY1 8/4TRET 8TDELAY ENDP六结束伪指令NAME:给模块(源程序)命名格式:NAME 模块名称它出现在源程序的最前端END:汇编结束格式:END 标号名它通知汇编程序本模块汇编到此结束标号名是可选项,若选取,应指向执行本程序的起始地址

23、若一个源程序是多模块,只有主模块的 END 后加标号,子模块只有 END七宏指令宏指令:在汇编语言源程序中多次重复出现的程序段,用一个名字来定义,然后当成一条指令来使用宏汇编:源程序中的宏指令经汇编程序翻译后扩展成对应程序段的机器码宏指令用 MACROENDM 来定义,如:CRLF MACRO50H 0151H 0052H 0253H 0054H 5555H 00MOV DL,0DHMOV AH,02HINT 21HENDM(CRLF 作回车换行)4.3 汇编语言程序设计(assembly language programming)一设计要求1程序简明、易读、易调试、易修改2程序占用内存要少(

24、包括程序长度及运行时所需空间)3程序运行速度要快二基本设计方法1选择合适的计算方法2绘制程序流程图3编制程序4上机调试三汇编语言程序格式和基本结构一般一个完整的汇编语言程序至少应包括以下三个程序段DATA SEGMENT DATA 数据段DATA ENDSSTACK SEGMENT STACK 堆栈段STACK ENDSCODE SEGMENT CODEASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX, DATAMOV DS,AXMOV AX,STACKMOV SS,AX 代码段CODE ENDSEND START程序的基本结构分为顺序结构、分支结构、循环

25、结构和子程序结构(一)顺序结构一种简单程序,按顺序执行例 1将 200H 单元的低 4 位和高 4 位分别送入 201H 和 202H 单元的低 4 位,这二单元的高 4 位清 0DATA SEGMENTORG 200HBCD DB 47H200H X X201H 0202H 0简化段格式:MODEL SMALLSTACK 64HDATA;紧接指令代码从偶地址开始存放CODESTART: MOV AX,DATAMOV DS,AXEND STARTDB 2 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK EN

26、DSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV BX,OFFSET BCDMOV AL,BXAND AL,0FHMOV BX+1, ALMOV AL,BXMOV CL,4ROL AL,CLAND AL,0FHMOV BX+2, ALHLTCODE ENDSEND START例 2将 ADDR1 和 ADDR2 两单元开始的二个 16 位无符号数相加,考虑到进位,将其结果存放在 SUM 开始的三个单元中DATA SE

27、GMNET ADDR1 DW 7854HADDR2 DW 9981HSUM DB 3 DUP(0)DATA ENDSSATCK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,ADDR1ADD AX,ADDR2MOV WORD PTR SUM,AXADC SUM+2,0HLTCODE ENDSEND START

28、例 3查表将 DATA1 单元中字节类型数据(00FH)转换成 ASCII码,并存入 ASCII 单元中DATA SEGMENTASCTABDB 30H,31H,32H ,33H,34H,35H ,36H,37HDB 38H,39H,41H ,42H,43H,44H ,45H,46HDATA1 DB 09HASCII DB ?DATA ENDSSTACK SEGMENT STACKDW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSH DSMOV AX,0PUSH AXMOV AX,

29、DATAMOV DS,AXMOV BX,OFFSET ASCTABMOV AL,DATA1XLATMOV ASCII, ALRETSTART ENDPCODE ENDSEND START例 4将 200H 和 201H 单元字节的高 4 位对调,低 4 位不变ASCTAB 30 031 139 941 A42 B46 FASCIICODE SEGMENTORG 200HDATA1 DB 0F3H,47HASSUME CS:CODE,DS:CODESTART:MOV AX,CODEMOV DS,AXMOV CL,4MOV AX,WORD PTR DATA1 ;AX=47F3HROL AX,CL

30、;AX=7F34HROL AH,CL ;AX=F734HROL AL,CL ;AX=F743HMOV WORD PTR DATA1,AXHLTCODE ENDSEND START(二)分支结构通过判断产生分支,借助于条件转移指令跳转到相应的分支地址执行分支程序分支程序由三部分组成 测试部分,负责产生决定分支的条件 定向部分,根据测试条件是否满足,决定程序是否分支 标注部分,标明分支的去向利用跳转表也可使程序转移到分支地址例 116 位二进制补码 X 在 DATA1 单元,求其绝对值送 DATA2单元(设 X8000H)X= X, X0-X, X数 2,交换DEC BXXCHG AL,BXINC

31、 BX ;恢复数据指针MOV AH,02H ;有交换标志NEXT: LOOP INGODEC DXJZ DONEDEC AHJNZ EXGODONE: RETSET ENDPCODE ENDSEND START(四)子程序结构基本要求: 子程序的开始(入口处)应给予一个标号,结束处有返回指令 通用子程序要说明入口条件(入口参数)和出口条件(出口参数) 调用子程序要注意保护现场和恢复现场调用返回的堆栈操作:CALL target ;段内 SPSP-2,SP+1,SP IP,IPIP+disp段间 SPSP-2,SP+1,SP CS,CSsegSPSP-2,SP+1,SP IP,IPoffsetR

32、ET ;段内 IP SP+1,SP,SPSP+2;段间 IP SP+1,SP,SPSP+2CS SP+1,SP,SPSP+2RET n ;如上操作后 SPSP+n子程序入口标号应说明距离属性对于一个 FAR 过程, 过程初必须先保护程序段前缀中的中断指令 INT 20H 的断点地址(DS :0000) ,它是一个程序正常结束退出的中断处理程序例 1将内存 200H 单元开始的一个五字节十六进制数显示出来(低位在低地址)DATA SEGMENTORG 200HNUM DB 9AH,78H ,56H,34H,12HDATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP

33、EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV BX,5MOV AX,STACKMOV SS,AXMOV SP,TOPMOV SI,OFFSET NUMNEXT: MOV DH,SI+BX-1 ;(不用 AL,因调用MOV DL,DH ; display 返回时 DLAL )MOV CL,4ROL DL,CLAND DL,0FHCALL DISPLAYMOV DL,DHAND DL,0FHCALL DISPLAYDEC BXJNZ NEXTMOV A

34、X,4C00HINT 21HDISPLAY PROC NEARADD DL,30HCMP DL,3AHJB OKADD DL,07H;(如果 DL=3AH,3AH+7=41H 是A )OK: MOV AH,02HINT 21HRETDISPLAY ENDPCODE ENDSEND START显示子程序入口条件:DL=1 位 16 进制数(高半字节为 0)注:INT 21H 为 DOS 功能调用,02H 功能号,字符输出显示AH=02H,DL=8 位数据(显示字符的 ASCII 码)例 2将内存 TAB 单元开始的一组 8 位二进制补码数求绝对值后送回并求和存入 SUM 单元(二字节) ,若处理

35、的补码为 80H 则只将原先处理的数据求和存入 SUM 单元,然后程序结束(设数元少于 516 个,其和不超过二字节)子程序入口条件:AL=补码数子程序出口条件:AL=绝对值DATA SEGMENTTAB DB 5,-4, 5,-4 ,80H,32,-1 ,68,-4,5DB 5,13,65,-8,4,-22 ,-56,45,0,-9COUNT EQU $-TABSUM DW ?DATA ENDSSTACK SEGMENT STACKSTA DW 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKABSADD PROC

36、FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,COUNTMOV BX,OFFSET TABMOV DX,0NEXT: MOV AL,BXCALL SUBR ;调用求绝对值子程序MOV BX,ALMOV AH,0 ;将绝对值扩展成 16 位ADD DX,AX ;求和INC BXLOOP NEXTSTORE:MOV SUM,DX ;存总和RETABSADD ENDPSUBR PROC NEAR ;求绝对值子程序CMP AL,80HJZ CHANAND AL,AL ;建立符号标志JNS OKNEG ALJMP SHORT OKCH

37、AN: POP SI ;利用堆栈操作修改返回地址MOV SI,OFFSET STOREPUSH SIOK: RETSUBR ENDPCODE ENDSEND START4.4 汇编与调试(assembling and debugging)一编辑在计算机上建立汇编语言源程序,可用各种编辑软件编辑,如:EDLIN、PE2、EDIT、WPS 、WORD 等二汇编程序 MASM 和连接程序 LINK1汇编MASM 二次扫描:第一次定义源程序每行的相对位置,求出标号及变量的偏移值第二次把汇编指令翻译成机器码汇编后建立三个文件: 目标浮动文件(扩展名为 OBJ) 列表文件(扩展名为 LST) 交叉索引文件

38、(扩展名为 CRF) ,又叫打印文件,可在 DOS 下用 CREF 命令转换后用 TYPE 命令打印,做法是:CREF 出现CREF FILENAME.CRF: 出现LIST FILENAME .CRF: 转换完成2连接LINK 对 OBJ 文件连接后,可产生的文件有: 可执行文件(扩展名为 EXE) 列表文件(扩展名为 MAP) 数据库文件(扩展名为 LIB) ,MASM 无库文件可连接,故.LIB 文件不会产生若汇编语言源程序格式符合.COM 文件要求,则可用 DOS 外部命令 EXE2BIN 将.EXE 文件转化为.COM 文件,方法是:EXE2BIN 文件名 文件名.COMDOS 下同

39、文件名不同扩展名执行的优先顺序为:.COM、.EXE、.BAT三调试程序 DEBUGDEBUG 主要用来调试(查错和改错)汇编语言程序,也可用来编制较小的程序用 DEBUG 汇编产生的可执行文件为.COM 文件,长度在 64K 内(即一个段)DEBUG 可实现的操作有:显示寄存器/ 存储器内容、通过单步执行检查寄存器/存储器内容、修改寄存器/ 存储器内容、跟踪指令执行、简单算术运算、处理符号表、汇编、反汇编等DEBUG 的 19 个命令:汇编 A 反汇编 U 比较 C 显示 D 修改E填充 F 执行 G 跟踪 T 输入 I 输出O传送 M 寄存器 R 检索 S 装入 L 写盘W进程 P 命名

40、N 十六进制运算 H 退出QDEBUG 状态下的标志位表示:OF DF IF SF ZF AF PF CF0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1NV OV UP DN DI EI PL NG NZ ZR NA AC PO PE NC CY4.5 高级语言与汇编子程序的连接(linkage of high-level language with assembly language subroutine)一混合编程原理简介混合编程的主要问题:不同语言之间的连接 调用过程中的参数传递高级语言程序调用汇编子程序时,参数传递通常由堆栈完成,过程:主程序将有关的寄存器内容压入堆栈主

41、程序将要传送的参数值(有的是存放地址)按其编译系统规定的顺序压入堆栈,然后将返回地址入栈,转而执行被调用程序子程序将主程序的基址指针 BP 压入堆栈并设立新的 BP,同时给参数分配堆栈地址从子程序返回时,将进行以下操作:子程序恢复主程序 BP从堆栈弹出有关的参数或其地址返回主程序若有返回值,一般由寄存器带回主程序而不放入堆栈传送给主程序二高级语言程序调用汇编子程序本章要点:1汇编语言程序、汇编程序、汇编、连接、调试2常用伪指令DB、DW 、DD 、DUP 、EQU、SEG、OFFSET、LENGTH 、TYPE,SIZE ,ORG、AT、END、 (类型、距离)PTR、SEGMENT ENDS

42、、ASSUME、PROCENDP3汇编语言程序格式,一般定义三个段,串操作需附加段4汇编语言程序结构:顺序、分支、循环、子程序第一至四章要点:1数、码转换,二进制运算机器数,原码,补码,反码,BCD 码(压缩、非压缩) ,ASCII码数表示的范围,计算机的基本组成2CPU 结构特点EU、BIU 并行工作,工作模式,逻辑地址,物理地址通用寄存器的特定用法标志寄存器,堆栈8088CPU 数据线,地址线,控制线,分时复用指令周期,总线周期,时钟周期3指令系统寻址方式,有效地址,偏移量,位移量及计算指令格式,段超越,标志的建立,初始条件的设置各指令的操作内容,非法指令4熟练掌握常用指令编程常用指令如:MOV,ADD,SUB,AND , OR,XOR ,SHL,ROL,RCL ,LOOP,JC,JS 等5读程序识别功能6常用伪指令DB,DW ,DD ,DUP ,EQU,SEG,OFFSET,LENGTH ,TYPE,SIZE,ORG,AT,$,END,PTR,SEGMENT ENDS,ASSUME,PROC ENDP 等汇编语言程序格式和结构编程时注意:变量类型匹配、寄存器不能重复使用、数据的最高位为字母时前头应加 0、设置指令特定使用的寄存器初值等等

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报