汇编语言课件:第4章汇编语言程序格式

上传人:ni****g 文档编号:569809578 上传时间:2024-07-31 格式:PPT 页数:33 大小:155.50KB
返回 下载 相关 举报
汇编语言课件:第4章汇编语言程序格式_第1页
第1页 / 共33页
汇编语言课件:第4章汇编语言程序格式_第2页
第2页 / 共33页
汇编语言课件:第4章汇编语言程序格式_第3页
第3页 / 共33页
汇编语言课件:第4章汇编语言程序格式_第4页
第4页 / 共33页
汇编语言课件:第4章汇编语言程序格式_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《汇编语言课件:第4章汇编语言程序格式》由会员分享,可在线阅读,更多相关《汇编语言课件:第4章汇编语言程序格式(33页珍藏版)》请在金锄头文库上搜索。

1、 汇编程序功能汇编程序功能 伪操作伪操作 汇编语言程序格式汇编语言程序格式 汇编语言程序的上机过程汇编语言程序的上机过程第第4章章 汇编语言程序格式汇编语言程序格式1. 程序运行步骤及生成的文件程序运行步骤及生成的文件myfile.asm编辑程序编辑程序汇编程序汇编程序连接程序连接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe建立建立, , 运行汇编语言程序运行汇编语言程序CEDIT MYFILE . ASMCMASM MYFILE . ASM Microsoft (R) Macro Assembler Ve

2、rsion 5.10 Copyright (C) Microsoft Corp 1981,1988.All rights reserved. Object filename MYFILE.OBJ: Source listing NUL.LST: MYFILE.LST Cross-reference NUL.CRF: 47962 + 413345Bytes symbol space free 0 Warning Errors 0 Severe ErrorsCLINK MYFILE . OBJ Microsoft (R) Overlay Linker Version 3.64 Copyright

3、(C) Microsoft Corp 1983-1988. All rights reserved. Run File MYFILE.EXE: List File NUL.MAP: Libraries .LIB: LINK : warning L4021: no stack segment CMYFILE2. 汇编程序功能汇编程序功能汇编程序的主要功能:汇编程序的主要功能: 检查源程序,给出出错信息。检查源程序,给出出错信息。 产生目标文件产生目标文件( (. .objobj) )和和列表文件列表文件( (. .lstlst) )。 展开宏指令。展开宏指令。3. 伪操作(伪指令)伪操作(伪指令

4、) 伪操作是汇编程序对源程序进行汇编时处理的伪操作是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。存储器分配、指示程序开始结束等功能。 处理器选择伪操作处理器选择伪操作 段定义伪操作段定义伪操作 程序开始和结束伪操作程序开始和结束伪操作 数据定义及存储器分配伪操作数据定义及存储器分配伪操作 表达式赋值伪操作表达式赋值伪操作 地址计数器与对准伪操作地址计数器与对准伪操作 基数控制伪操作基数控制伪操作Directives.8086 选择选择 8086 指令系统指令系统.286 选择选择

5、 80286 指令系统指令系统.286P 选择保护模式下的选择保护模式下的 80286 指令系统指令系统.386 选择选择 80386 指令系统指令系统.386P 选择保护模式下的选择保护模式下的 80386 指令系统指令系统.486 选择选择 80486 指令系统指令系统.486P 选择保护模式下的选择保护模式下的 80486 指令系统指令系统.586 选择选择 Pentium 指令系统指令系统.586P 选择保护模式下的选择保护模式下的 Pentium 指令系统指令系统 处理器选择伪操作:处理器选择伪操作: 段定义伪操作:段定义伪操作:完整的段定义格式完整的段定义格式 data segme

6、nt data segment ; 定义数据段定义数据段 data endsdata ends;-;-extra segment extra segment ; 定义附加段定义附加段 extra endsextra ends;-;-code segment code segment ; 定义代码段定义代码段 assume assume cscs:code,:code, ds ds:data,:data, es es:extra:extrastart: start: mov mov ax, dataax, data mov dsmov ds, ax , ax ; 段地址段地址 段寄存器段寄存器

7、code endscode ends end start end startPSPPSPDSDSESESSSSSCSCSEXE程序的内存映象图装入模块文件头code segmentmain proc far assume start: push ds mov ax, 0 push ax retmain endpcode ends end startcode segmentmain proc far assume start: mov ax,4c00h int 21hmain endpcode ends end start段段名名 SEGMENT 定定位位类类型型 组组合合类类型型 使使用用类类

8、型型 类类别别 ; 语句序列段名段名 ENDS(1)定位类型 align_type(2) PARA BYTE WORD DWORD PAGEPARA BYTE WORD DWORD PAGE(2)组合类型 combine_type(3) PRIVATE PUBLIC COMMON STACK AT PRIVATE PUBLIC COMMON STACK AT expexp(3)使用类型 use_type(4) USE16 USE32USE16 USE32(4) 类别 class存储模式与简化段定义伪操作存储模式与简化段定义伪操作(1) MODEL 伪操作伪操作 .MODEL 存储模式存储模式

9、,语言类型语言类型 ,操作系统类型操作系统类型 ,堆栈选堆栈选项项 存储模式:存储模式:tiny small medium compact largetiny small medium compact large huge flat huge flat.model small.model small.stack 100H.stack 100H.data.data .code.code.startup.startup .exit 0.exit 0endend(2) 简化的段定义伪操作简化的段定义伪操作. .code namecode name.data.data.data?.data?. .fa

10、rdata fardata namename. .fardatafardata? name? name.const.const.stack size.stack size.model small.model small.data.data.code.code.startup.startup .exit 0.exit 0end end . .model smallmodel small .data .data .code .codestart: start: mov mov ax, dataax, data mov dsmov ds, ax, ax mov mov ax, 4c00hax, 4c

11、00h int int 21h21h end start end start . .model smallmodel small .const .const .data .data .code .codestart: start: mov mov ax, DGROUPax, DGROUP mov dsmov ds, ax, ax mov mov ax, 4c00hax, 4c00h int int 21h21h end start end start段组定义伪操作段组定义伪操作dseg1 segment word public data dseg1 ends dseg2 segment wor

12、d public data dseg2 ends datagroup datagroup group dseg1, dseg2group dseg1, dseg2cseg segment para public code assume cs:cseg, ds:datagroupstart: mov ax, datagroup mov ds, ax mov ax, 4c00h int 21hcseg ends end startdata1 segment data1 segment wordword const1 const1 dw dw 100100data1 data1 ends ends

13、data2 segment data2 segment wordword var1 var1 dw dw ? ?data2 endsdata2 endsdatagroup datagroup group data1,data2group data1,data2code segment code segment assume assume cscs:code, :code, dsds: :datagroupdatagroup mov mov ax,ax, datagroup datagroup mov ds mov ds, ax, ax mov mov ax, const1ax, const1

14、mov mov var1, axvar1, ax mov mov ax, 4c00hax, 4c00h int int 21h21hcode endscode ends end start end startTITLE textNAME module_nameEND label . STARTUP. EXIT return_value 程序开始和结束伪操作:程序开始和结束伪操作: 数据定义及存储器分配伪操作:数据定义及存储器分配伪操作:变变量量 助助记记符符 操操作作数数 , 操操作作数数 , ; 注注释释 助记符:助记符:DB DW DD DF DQ DTDB DW DD DF DQ DTD

15、ATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,? - - 0 0AHAH 0404H H 1010H H - - 6464H H 0000H H 0000H H 01 01H H FBHFBH FFHFFH - -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 例:ARRAY DB HELLO DB AB DW AB 4848H H 4545H H 4CH4CH 4CH4CH 4FH4FH 4141H H 4242H H 4242H H 4141H H ARRAY ARRAY PAR1 DW 100,200 PAR

16、2 DW 300,400ADDR_TABLE DW PAR1,PAR2VAR DB 100 DUP (?) DB 2 DUP (0,2 DUP(1,2),3)OPER1 DB ?, ?OPER2 DW ?, ? MOV OPER1, 0 ;字节指令 MOV OPER2, 0 ;字指令OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 类型不匹配 MOV AX, MOV AX, WORD PTRWORD PTR OPER1+1 OPER1+1 MOV AL, MOV AL, BYTE PTRBYTE PTR OPER2

17、 OPER2(AX)=3402H (AL)=34HBYTE_ARRAY LABEL BYTEWORD_ARRAY DW 50 DUP (?) tos LABEL WORDLABEL 伪操作:伪操作: name LABEL typename LABEL type BYTE_ARRAY BYTE_ARRAY WORD_ARRAY WORD_ARRAY tostos 50字00640064H H 表达式赋值伪操作:表达式赋值伪操作:表达式名表达式名 EQU 表达式表达式ALPHA EQU 9BETA EQU ALPHA+18BB EQU BP+8 “ = ” 伪操作伪操作 (允许重复定义允许重复定义

18、)EMP = 7EMP = EMP+1 地址计数器与对准伪操作:地址计数器与对准伪操作:地址计数器地址计数器 $ :保存当前正在汇编的指令的地址保存当前正在汇编的指令的地址 ORG $+8 ; 跳过8个字节的存储区 JNE $+6 ; 转向地址是 JNE 的首址 +6 JMP $+2 ;转向下一条指令$ 用在伪操作的参数字段:用在伪操作的参数字段:表示地址计数器的当前值表示地址计数器的当前值 ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4 0000H H 01H 00H 02H 00H 7CH7CH 0000H H 03H 00H 04H 00H 8282H H ARRAY

19、 ARRAY 007007E E0078007800740074ORG 伪操作:伪操作:SEG1 SEGMENT ORG 10 VAR1 DW 1234H ORG 20 VAR2 DW 5678H ORG $+8 VAR3 DW 1357HSEG1 ENDSBUFFER LABEL BYTE ORG $+8 BUFFER DB 8 DUP (?) ORG 100HSTART: B DW 2 DUP (?) ALIGN boundary ALIGN 4 ALIGN 2 ; EVENEVEN ; ;使下一地址从偶地址开始使下一地址从偶地址开始A DB morningEVEN 基数控制伪操作:基数控

20、制伪操作:. RADIX 表达式表达式 ; 规定无标记数的基数MOV BX, 0FFHMOV BX, 178.RADIX 16MOV BX, 0FFMOV BX, 178D3. 汇编语言程序格式汇编语言程序格式标号标号 指令指令 寄存器寄存器 说明程序或语句说明程序或语句变量变量 伪指令伪指令 标号标号 的功能的功能 宏指令宏指令 变量变量 常数常数 表达式表达式源程序的每条语句可表示为:源程序的每条语句可表示为: 名字名字 操作操作 操作数操作数 ; 注释注释 标号标号/ /变量:变量:段值、偏移量、类型三种属性段值、偏移量、类型三种属性 表达式:表达式:数字表达式数字表达式 地址表达式地址

21、表达式表达式操作符:表达式操作符:(1) 算术操作符:算术操作符: 、 、 、 、ModVIDEO_BUF DB 25*80*2 DUP(?)ARRAY DW 1,2,3,4,5,6,7ARYEND DW ? MOV CX, (ARYEND-ARRAY)/2ADD AX, BLOCK+2 ; 符号地址常数 有意义 ; 时意义不明确MOV AX, BX+1 ; MOV AX, BX+1 ; 寄存器间接寻址OPR1 EQU 25 ;00011001BOPR2 EQU 7 ;00000111BAND AX, OPR1 AND OPR2(2) 逻辑和移位操作符:逻辑和移位操作符: AND、OR、XOR

22、、NOT、SHL、SHR; AND AX,1IN AL, PORT_VAL ;61HOUT PORT_VAL AND 0FEH, AL ;60HMOV AX, 0FFFFH SHL 2; MOV AX,0FFFCH(3) 关系操作符:关系操作符: EQ、NE、LT、LE、GT、GE计算结果为计算结果为逻辑值逻辑值:真真 0 0FFFFHFFFFH 假假 00000000H HX: Y: 若若 128 (真真) 汇编结果:汇编结果: MOV FID, -1若若 128 (假假) 汇编结果:汇编结果: MOV FID, 0MOV FID, (OFFSET Y - OFFSET X) LE 128(

23、4) 数值回送操作符:数值回送操作符: OFFSET、SEG、TYPE、 LENGTH、SIZE SIZE SIZE 变量变量功能:功能:LENGTH * TYPELENGTH * TYPEOFFSETOFFSET / SEGSEG 变量变量 / 标号标号功能:回送变量或标号的偏址功能:回送变量或标号的偏址 / / 段址段址TYPETYPE 变量变量 / 标号标号 / 常数常数 DB DW DD DF DQ DT NEAR FAR DB DW DD DF DQ DT NEAR FAR 常数常数 1 2 4 6 8 10 -1 -2 0 1 2 4 6 8 10 -1 -2 0LENGTH LE

24、NGTH 变量变量功能:回送由功能:回送由DUP定义的定义的变量的单元数,其它情况回送变量的单元数,其它情况回送1 1ARRAY DW 100 DUP (?)TABLE DB ABCD ADD SI, TYPE ARRAY ; ADD SI, 2ADD SI, TYPE TABLE ; ADD SI, 1MOV CX, LENGTH ARRAY ; MOV CX, 100MOV CX, LENGTH TABLE ; MOV CX, 1MOV CX, SIZE ARRAY ; MOV CX, 200MOV CX, SIZE TABLE ; MOV CX, 1(5) 属性操作符:属性操作符: PT

25、R、段段操作符、操作符、SHORT、 THIS、HIGH、LOW、HIGHWORD、LOWWORDHIGH和LOW CONS EQU 1234H MOV AH, HIGHHIGH CONS MOV AL, LOWLOW CONS 类型类型 PTR PTR 表达式表达式 MOV WORD PTRPTR BX, 5段操作符段操作符 MOV ES:ES: BX, ALSHORT SHORT 标号标号 JMP SHORTSHORT NEXTTHIS THIS 类型类型 TA EQU THISTHIS BYTE TD DW 1234H NEXT EQU THISTHIS FAR MOV AX,24. 汇

26、编语言程序的上机过程汇编语言程序的上机过程 .model tiny .code org 100hbeginbegin: jmp mainmain;*num1 dw 1199Hnum2 dw 1166Hsum dw ?;*mainmain proc nearnear mov ax, num1 add ax, num2 mov sum, ax mov ax, 4c00h int 21hmain endp end beginbegincode segment code assume cs:code,ds:code,ss:code,es:code org 100Hbegin: jmp mainnum1 dw 1199Hnum2 dw 1166Hsum dw ? main proc near mov ax, num1 add ax, num2 mov sum, ax mov ax, 4c00h int 21hmain endpcode ends end begin第第4章作业章作业Page 155 4.15 4.16 4.5 4.8 4.12 4.14 4.17

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号