《2022年2022年汇编语言程序设计教案 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言程序设计教案 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第三章汇编语言程序设计Assembly Language Programming? 格式 #? 伪指令 #?DOS/BIOS 调用微机系统与接口东南大学1OS/OS 调用 (简单了解)重点: 数据结构表示变量、指针程序结构程序流控制(条件、分支、循环)程序设计方法程序设计语言与汇编语言计算机 程序 设计语言高级语言( High Level Language ): 通用,一般不要求了解结构原理。易读,易编写,调试,简洁BASIC ,.,VC(+)/VB/DELPHI,JAVA,C#,HTML机器语言、汇编语言和高级语言微机系统与接口东南大学2=? 机器语言(执行)-翻译 /编译解释程序( In
2、terpreter )/编译程序( Compiler )(编译原理)C+编译 ? 真实指令JAVA 编译Java bytecode 中间代码 ? 虚拟机指令 ? JAVA 解释器程序设计语言与汇编语言(2)汇编语言 (Assembly Language)-面向具体机器(CPU ) ,最接近于机器语言的低级语言。借助于助记符编程,地址数据可符号化(可读性提高),编写、修改较方便。完整的语法,不易出错。例:机器语言二进制表示的指令和数据序列/目标代码微机系统与接口东南大学3ADD AX,100 ( 05 64 00) JMP 1000:2000 ( EA 00 20 00 10)特点:汇编语言程序
3、 - 机器代码一一对应,程序流可控,速度快,用于编制系统程序、实时通信/控制/处理。 -面向具体机器( CPU)语言,移植性差,不通用。程序设计语言与汇编语言(2)汇编( Assemble)源程序代码 ? 机器语言代码(目标程序)的过程。 功能: 语法检查、翻译。汇编程序Assembler? 机器汇编( ?人工汇编)。交叉汇编借机器语言二进制表示的指令和数据序列/目标代码微机系统与接口东南大学4助其它机器(如PC)汇编。宿主机 (Host Computer) 目标机 (Target Computer)反汇编( Dis-Assemble)机器语言代码 ? 指令代码(源程序) ,? 逆向工程 Re
4、verse Engineering )Copyright?程序设计语言与汇编语言(3)汇编程序获取(1)机器码 ? DisassembleSourcer/debugger(2)C ? ASMCL/Fa开关 ;TCC -B; VC+ ? Listing File(3)ASM 编程(高级语言嵌入小汇编程序模块)微机系统与接口东南大学5MASMTASMASM;汇编程序( MS-MASM4.0/5.06.11/6.14/6.15)ASM86( 小,无宏 MICRO 支持 )TASM(2.0/3.0/3.1/4.1 ) MS/DOS 版, Winddows 版汇编程序用途EXE, DLL, PE; PO
5、, OO;汇编语言源程序格式(例 1P137)DATASEGMENT;定义数据段DATA1 DB 0F8H,60H, 0ACH ,74H ,3BH ;被加数DATA2 DB 0C1H ,36H,9EH,0D5H,20H;加数段名段说明保留字微机系统与接口东南大学6DATAENDS;数据段结束CODESEGMENT ;定义代码段ASSUMECS:CODE ,DS:DATA ;告诉汇编程序段范围START : MOVAX ,DATAMOV DS,AX;初始化 DSMOVCX ,5;循环次数送 CX标号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
6、- - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 2汇编语言源程序格式(例1续)MOVSI,0;置SI初值为零CLC; 清CF 标志LOOPER :MOVAL ,DATA2 SI; 取一个字节加数ADCDATA1SI ,AL ;与被加数相加INCSISI1指向下一字节微机系统与接口东南大学7;加 指向下字节DECCX;计数器 CX减1JNZLOOPER;不等于零,转 LOOPER(HLT);停止 -实际? (INT21H)CODEENDS;代码段结束END START ;源程序结束,指定起始地址标号汇编语言源程序格式(例2)(
7、PC台式计算机在 MS-DOS 环境下的标准程序格式)MAINPROC FAR;MS-DOS 模板语句PUSHDSXOR AX,AX;=MOVAX,0微机系统与接口东南大学8PUSH AX;保存返回指针 DS:0000START:MOV AX, DATAMOV DS, AX:RET;Far 返回原 DS:0000H ? MS-DOSMAINENDP汇编语言源程序格式(详解1)分段结构指定堆栈、数据、代码段-SEGMENT-ENDS-(END 结束?)?当前物理段( SS/CS/DS/ES)-运行/逻辑段 编程微机系统与接口东南大学9程序语句的类型和组成基本单元:语句 ? 指令性语句 -CPU
8、指令 /指示性语句-伪操作(汇编辅助信息)语句构成: nameOpcode/ 伪操作操作数 ;注释 LOOP1 :. (指令) / DATA1DB .( 伪操作 )汇编语言源程序格式(2)程序语句表面上组成:(专业术语 )? 保留字( Reserved Words )SEGMENTENDSOFFSETSIZEDB DWDDMOVPUSH ADD SUB MULDIVINCDEC微机系统与接口东南大学10LOOPPROCENDP CALLRETEND? 标识符( Identifiers 字母 +字母 /数字 /_,32个)? 界符( Delimiters 分隔两部分)空格 :,? 常数( Con
9、st.s)1000H11101000B0ABCDH? 注释( Comments ) ;分号后 大段语句 :.Comment /汇编语言源程序格式(3)-名字( name)标号( Label) xxxx: 指令的符号地址(可浮动)段、偏移量、类型(NEAR)/FAR)变量名 /段名 /过程名 -指示性语句(可浮动)-无冒号 ;-有规定 - 段、偏移量、类型(操作数 )微机系统与接口东南大学11(BYTE/WORD/DWORD/QWORD/TBYTE(10))字节字双字四字十字节段过程变量标记名称汇编语言源程序格式(4)助记符和伪操作(Mnemonic & Pseudo Operation)?指令
10、助记符MOV ,ADD ,.?指示性操作DB , DW , SEGMENT , ENDS ,ASSUME ,END微机系统与接口东南大学12操作数 (Operand )单 /双/无,逗号隔开-常数 /寄存器 /标号/变量 /表达式(1)常数:xxxx D/B/H/O (Q), ASCII (A01 )浮点数十进制(实数100.2,1.33E-8) (不要求P13)浮点数十六进制(实数10A4FE87R-8 位 HEX 短实数 /16位HEX 长实数 /20位临时实数)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
11、- - - - - - - 第 2 页,共 6 页 - - - - - - - - - 3源程序格式操作数( 1)(2)寄存器8位: AL/AH,BH/BL, CH,CL,DH,DL16位:AX/BX/CX/DX,SI/DI/BP/SP/ D/ES/CS(3)标号 (少用绝对地址,多用标号-维护,移植 )(4)变量内存数据区名 , 类型 B/W/DW/QW/TB微机系统与接口东南大学13(5)表达式(预编译 /汇编处理)算术运算符+ - * / MOD(变量地址 +/-)逻辑运算符(位) AND/OR/XOR/NOTAND AL ,100001BAND AL , 100001B AND 111
12、1101B源程序格式操作数( 2)(5)表达式(续)(预编译 /汇编处理)? 关系运算符关系运算符有:EQ(等于),NE (不等),LT(小于), GT (大于), LE (小于或等于),GE(大于或等于)等。微机系统与接口东南大学14参与关系运算的必须是两个数值,或同一段中的两个存储单元地址,但运算结果只可能是两个特定的数值之一:当关系不成立(假)时,结果为0;当关系成立(真)时,结果为0FFFFH 。例如, MOVAX ,4 EQ 3;关系不成立,故(AX)? 0MOVAX ,4 NE 3;关系成立,故(AX) ? 0FFFFH源程序格式操作数( 3)(5)表达式(续)(预编译 /汇编处理
13、)?分析运算符和合成运算符分析运算符用以分析提取一个存储器操作数的属性,如段、偏移量或类型等。OFFSET 、 SEG、 TYPE 、SIZE 、LENGTH ;微机系统与接口东南大学15合成运算符可规定存储器操作数的某个属性,例如类型。PTR 、THIS 、SHORT(类似类型强制转换)例:INC WORD PTR BXADDBYTE PTR 1000H, 38H源程序格式操作数( 4)(5)表达式(续)分析运算符OFFSET可以得到一个标号或变量的偏移地址(定位后已知 )MOV SI,OFFSET DATA1LEA SI, DATAlLEA SI, DATA1BX+100可以得到个标号或变
14、量的段值微机系统与接口东南大学16SEG可以得到一个标号或变量的段值MOV AX ,SEG ARRAYMOV DS,AXTYPE结果=类型数值(与存储器操作数类型属性的对应)B-1;W-2/DW-4/NEAR-(-1)/FAR (-2)n DUP(?) =?源程序格式操作数( 5)(5)表达式(续)分析运算符TYPEVARDW ?; 变量 VAR 的类型为字2ARRAYDD 10 DUP(?);变量 ARRAY 的类型为双字 :type ARRAY=4Thistest微机系统与接口东南大学17STRDBThis is a test ;变量 STR的类型为字节1:MOV AX ,TYPEVAR
15、;(AX )? 2MOV BX ,TYPE ARRAY; (BX )? 4MOV CX, TYPE STR ;(CX)? 1源程序格式操作数( 6)(5)表达式 (续)分析运算符LENGTH/SIZELENGTH一个变量 DUP 定义的变量总数非DUP则=1 (LENGTHARRAY=10 )SIZE一个变量第一个 DUP定义的字节总数微机系统与接口东南大学18(变量 TYPE*LENGTH)非DUP则=TYPE例V1 DB 20 DUP(?) ,20,100H DUP( A )V2 DD 4000H?SIZE V120SIZE V2=4名师资料总结 - - -精品资料欢迎下载 - - - -
16、 - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 4源程序格式操作数( 7)合成运算符号PTR/THIS/HIGH/LOW/$PTR(强制)指定 MEM 操作数类型,不明或强制MOV AX ,BX-INCBYTE/WORDPTR BXTHIS(同 C中UNION 联合体)同一变量区可按不同类型访问(微机系统与接口东南大学19同变量区 ,可按不同类型访问(BYTE/WORD/DWORD)V1WEQUTHISWORDV1BDB10 DUP(?)MOVAX ,(WORDPTR ) V1B;强
17、制转换(否则Warning 或Error )SHORT128/+127短标号JMP SHORTSLABLE源程序格式操作数( 8)(5)表达式(续)特殊运算 /运算顺序段超越CS:/ES/ SS:/DS:HIGHxxxx;highmydataLOWxxxx$(当前指令地址 )运算关系顺序P144 表3.2先合成 -分析运算微机系统与接口东南大学20(1)LENGTH,SIZE,WIDTH,MASK,(),(2)(结构成员) (3) (段超越)(4)PTR,OFFSET,SEG,TYPE,THIS(5)HIGH,LOW-(6)+,-(7)*/MOD,(8)SHL,SHR(9)EQ,NE,LT,L
18、E,GT,GE(10)NOT(11)AND(12)OR,XOR(13)SHORT (最低)(不用硬记,多用括号)优先顺序源程序格式伪操作命令汇编程序的命令(定义、分配管理)(CPU 指令 ? 一种操作 )处理器方式 /数据 /符号 /段/过程 /模块与链接定义宏处理 /条件 /列表/其他微操作微机系统与接口东南大学21处理器方式定义(.8086).286(C,P).586.MMX.386(C,P).686 (P).K3D.8087 .80287,.80387配对源程序格式伪操作命令(二)数据定义 (分配)DB (字节)DW (字) DD(双字) DQ (4字/8字节) DT (十字节 HEX
19、)例: PNAME DB Madein ChinaV1DB 30,20H,111110B, 3 DUP(4AH,?)V1NPDW ?,?,?, PNAME;(偏移量 )四字节微机系统与接口东南大学22V1FPDD PNAME;四字节段基地址,偏移量CS:IP 指针变量 );实数变量 (123.5);4字节数(整数变量)(12345678H)DT 十字节 HEX (如 Compacted-BCD )实数( 12.4444344444)源程序格式数据定义STRUC自定义多字段组成的数据类型。(同C中struct)-定义结构类型结构名 STRUC:例S1 STRUCV1 DB ?V2 DW ?微机系
20、统与接口东南大学23变量名 结构名 定义结构变量VS1 S1;VS2 S1 20 DUP(); VS3 S1 30 dup)结构变量名 .字段名(成员名)-引用|BX. 字段名, VS1. 字段名 (SIZE 等仍可用 )VS1.V1, BX.V2, BX.V1+100结构名ENDSS1 ENDS源程序格式符号定义名字 EQU 表达式(全局,唯一,不可换,汇编替换)COUNTEQU 2000名字 = 表达式COUNT=2000(可换改)名字 LABEL类型(Byte,Word ,Double Word ,STRUC ,RECORD ,NEAR ,FAR )微机系统与接口东南大学24THIS与C
21、中UNION 相近 -定义标号或变量类型(下一 CPU指令或 DB 伪指令 )例: V1W EQU THIS WORD ;;同V1W LABLEWORDV1BDB 10,23,7AH,41H,ABCD$ MOV AX, V1W;MOV DL, V1B名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 5源程序格式段定义( 1)SEGMENT/ ENDS逻辑段存储定位关系SEGMENT定位类型 ,组合类型 ,类别 .PARA(节Par
22、agraphXXXX0H)BYTE(任意)段1微机系统与接口东南大学25WORD(偶数地址)PAGE(页 256XXX00 )四种定位类型 :确定段的边界定位(浮动 预设为常量,相对关系 LINK )段2段3源程序格式段定义( 2)SEGMENT/ ENDSSNAME SEGMENT定位类型 ,组合类型 ,类别 .NONE不组合PUBLIC多个 模块 相同段名装配合一微机系统与接口东南大学26STACK堆栈,同Public( 相同段名装配合一)EXE文件装入时SP初值=末指针+1(栈底)COMMON公用不同程序遇到同名时同一地址装入,覆盖重叠临时变量,以最长为界MEMORY置于地址最高处,多个
23、时取第一个,其余作为COMMON源程序格式段定义 (3)SEGMENT/ ENDSSEGMENT定位类型 ,组合类型 ,类别 .AT 表达式定位在指定段基位置AT 2000H? 起始物理地址 20000H;(名称)决定装入顺序顺序装入微机系统与接口东南大学27类别(名称)决定装入顺序,顺序装入,相同类别 连续装入成一块 (段)ENDS-段结束X简化段定义(P162)MASM5.0.CODE.DATA.STACK.MODLE模式 ,高级语言 )源程序格式ASSUME 说明ASSUME SR:段名 ,SR:段名 ,-逻辑段与物理段之间的关系(段寄存器 =CS/DS/ES/SS)直接MEM 访问时,
24、汇编时确定变量属于哪一个段范围计算偏移量,必要时自动加段超越前缀。不改变段寄存器内容!微机系统与接口东南大学28MOVAX, WORDMEM汇编 ? CS/ES/SS: MOV AX,3002未注明 error A2068:Cannot address with segment register.人工说明 (强制指定 SEG REG,易错不可取)结果 =计算相对于指定段偏移量(定位类型)源程序格式过程定义过程名PROC(NEAR )/FAR:RET;(自动 RETF/RET )例:过程名ENDP; 程序块定义MYPROC PROC微机系统与接口东南大学29子程序( SUBROUTINE )引用
25、: CALL过程名 ,(堆栈使用)转移, 顺序执行(P160:条件 ?)结构化:RETMYPROC ENDP:CALL MYPROC;源程序格式过程 的应用? 缩短源程序代码总长度:一处定义 , 多处调用 (CALL)? 利于实现模块化的程序设计,便于编制、调试和维护PUSH S1实现 : 利用堆栈来传递参数、微机系统与接口东南大学30PRINTCHS PROC:RETPRINTCHS ENDPCALL PRINTCHS:PUSH S2CALL PRINTCHS:PUSH S3 CALL PRINTCHS保存断点、嵌套、返回名师资料总结 - - -精品资料欢迎下载 - - - - - - -
26、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 6源程序格式模块与链接定义NAME模块名;多个.ASM 源程序文件END 起始入口标号PUBLIC符号,。EXTRN名字:类型 ,。微机系统与接口东南大学31(汇编)源程序文件汇编工具 MASM.EXE浮动目标程序xxx.ASM?xxx.OBJ浮动目标程序链接程序 link.exe可执行目标程序xxx.OBJ?xxx.exe单模块源程序格式多模块与链接(汇编)源程序文件汇编工具 MASM.EXE浮动目标程序A.ASM?A.OBJB.ASM?B.OBJ
27、C.ASM?C.LIB多模块微机系统与接口东南大学32A模块 +B模块 +库模块 ? 可执行程序程序Link A(.OBJ)+B(.OBJ)+ C.lib ?A.EXEC.LIB = 静态链接库 ?动态链接库 DLL源程序格式多模块编程应用PUBLICSpeedEXTRN BPROC:FARCALLBPROCEXTRN ASpeed:WORDMOV AX, SEG AspeedMOV DS,AXMOV AX,AspeedA模块B模块微机系统与接口东南大学33CALL BPROCCALL BPROCBPROCMOV AX, ASppedASpeedDW 200B_STARTPROCEND B_S
28、TARTCMP 源程序格式宏处理 MACRO ( 概念 )MACRO/ENDM-宏定义程序简洁宏指令名MACRO参数,。 ;形参(哑元):;(宏定义体)ENDM语句:宏调用,汇编时宏扩展(代换)成相应的MPU 指令微机系统与接口东南大学34形式 : 宏指令名实参PRINT 30HPRINT 31HPRINT 0DHPRINT 0FH宏调用(例)PRINT MACROP1MOV AL,P1; 形式参数MOV DX,278HOUT DX,ALENDM宏定义(例)源程序格式宏处理 MACRO ( 概念)MOV AL,30H; 实参数MOV DX,278HOUT DX,ALMOV AL,31H; 实参
29、数MOV DX,278HPRINT 30HPRINT 31HPRINT 0DHPRINT 0FH宏调用微机系统与接口东南大学35OUT DX,ALMOV AL,0DH; 实参数MOV DX,278HOUT DX,ALMOV AL,0AH; 实参数MOV DX,278HOUT DX,AL类似 :包含文件 /模块Include xxxx.h Include com.asm提高程序的可读性简洁性源程序格式条件汇编 (概念)同IFDEF/ENDIFIFcondition指令组(ELSE )!重要表示法ORG2000H;微机系统与接口东南大学36指令组ENDFORG 2000H; 起始偏移地址.LIST/.XLIST-列表有效 /无效JMP$当前行(指令)DW$-V2(例 )汇编程序 (二)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -