微机原理与应用第七章.ppt

上传人:本田雅阁 文档编号:2928869 上传时间:2019-06-07 格式:PPT 页数:82 大小:7.34MB
返回 下载 相关 举报
微机原理与应用第七章.ppt_第1页
第1页 / 共82页
微机原理与应用第七章.ppt_第2页
第2页 / 共82页
微机原理与应用第七章.ppt_第3页
第3页 / 共82页
微机原理与应用第七章.ppt_第4页
第4页 / 共82页
微机原理与应用第七章.ppt_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《微机原理与应用第七章.ppt》由会员分享,可在线阅读,更多相关《微机原理与应用第七章.ppt(82页珍藏版)》请在三一文库上搜索。

1、第七章 微型计算机汇编语言及汇编程序,7.1 宏汇编语言的基本语法 7.2 伪指令 7.3 宏指令 7.4 系统功能调用 7.5 汇编程序的功能及汇编过程,7.1 宏汇编语言的基本语法,汇编程序:用来把汇编语言编写的程序自动翻译成目的 程序的软件,7.1.1 伪指令语句格式,内存数据定义伪指令,7.1.2 常量、变量和标号,常数:没有任何属性的纯数值。在程序运行中不发生变化。,如:10010011B、0A5H、”ZHIFUCHUAN”,变 量:表示存储单元,单元中的数在程序运行期间随时 可以修改。 变量名:存放数据单元的符号地址,标 号:表示存储单元,单元中存放的是机器指令代码,段属性(SEG

2、):变量或标号对应存储单元所在段的段值 偏移量属性(OFFSET):变量或标号对应存储单元的起始地址的段内偏移 类型属性(TYPE): 变量类型主要是字节(BYTE)、字(WORD)、双字(DWORD) 标号类型主要是近(NEAR)和远(FAR),标号指令所在内存单元的符号地址,有三个属性: 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR: NEAR表示标号所在语句与转移指令/ 调用指令在同一码段内,跳转时 只需改变IP即可。 FAR标号所在语句与转移指令/调用 指令不在同一代码段内。 若没有对类型进行说明,默认为NEAR。 标号通常作为转

3、移指令或CALL指令的转移地址。,变量,变量即内存中的存储单元或数据区。 变量名是存储单元(数据区)的符号地 址或名字。 变量也有三个属性: 段地址变量所在段的段地址 偏移量变量单元地址与段首地址之间的位移量。 类 型有BYTE、WORD和DWORD三种。 变量在程序中作为存储器操作数被引用。,标号和变量名的使用规则 组成:A-Z(不分大小写), 0-9, ? . _ $ 不能以数字开头,句号(.)只能作为首字符 长度小于31个字符 不能与保留字(指令助记符、伪指令、预定义符号等)重名 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOO

4、P, AAA, #HELP, +ONE (P457),汇编语言的一个实例: hello.asm data SEGMENT Hello DB Hello, world!,0DH,0AH,$ data ENDS prog SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello ;取字符串首地址 MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH INT 21H ;退回DOS prog ENDS END start,名字,标号,ORG 100H X DB 33H Y DW 0A65DH,变量名

5、,MOV AL,X MOV BX,Y,7.1.3 表达式与运算符(1),表达式:由操作数和运算符组成的式子,算术运算符: +、-、*、/、MOD(除法取余)、SHL(左移)、 SHR(右移),例: MOV AX,100*4+5 ;AX=405,例1)算术运算符 +、-、*、/,MOD,用于数字表达式: MOV AX , 4*1024 汇编后的形式为: MOV AX , 4096 用于地址表达式,例: LEA SI , TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为: LEA SI , 1003H,例2)逻辑运算符 AND、OR、XOR、NOT,逻辑运算符只能用于数字表达式中。 例

6、:MOV CL , 36H AND 0FH 经汇编后:MOV CL , 06H 注意,不要把逻辑运算符与逻辑运算指令混淆: 例:AND AX , 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与AND AX, 3F00H等价。,例3)关系运算符EQ、NE、LT、GT、LE、GE,关系运算的结果是一个逻辑值:真或假 关系为真,结果为全1 关系为假,结果为全0 例:MOV BX , PORT GT 300H 若PORT的值大于300H,则汇编后为: MOV BX,0FFFFH 否则汇编后为: MOV BX,0, 分析运算符(数值回送操作符): SEG(计算段基址

7、) OFFSET(计算偏移地址) TYPE(计算符号类型值; P157) SIZE(计算符号名分配的字节数)(=TYPE*LENGTH) LENGTH(计算符号名分配的数),7.1.3 表达式与运算符(2),例2:把VARW的偏移地址送BX MOV BX,OFFSET VARW,例3:假设VARW变量是字变量,把VARW的类型值送AL MOV AL, TYPE VARW ;AL =2,例4)取地址运算符SEG、OFFSET,SEG:取变量/标号的段地址 OFFSET:取变量/标号的偏移地址 例:VAR DB 12H MOV BX,OFFSET VAR ;取变量VAR的偏移地址 MOV AX,S

8、EG VAR ;取变量VAR的段地址 注意,以下指令的异同: MOV BX, OFFSET VAR LEA BX, VAR OFFSET只能取静态的偏移地址; LEA指令即可取静态的偏移地址,也可取动态的偏移地址。,例5)取值运算符TYPE、LENGTH、SIZE,TYPE 取变量的类型(1,2,4) LENGTH 取所定义变量的长度 (即变量中元素的个数) SIZE 取所定义存储区的字节数 (=TYPE*LENGTH) 例:VAR DW 1,2,3,4,5 则 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10 执行: MOV CX, SIZE VAR ; (

9、CX)=10,7.1.3 表达式与运算符(3), 组合运算符(属性操作符),定义符号名为新类型PTR,格式: PTR 功能:用于指定或临时改变变量或标号的类型,例:MOV WORD PTR SI,1 ;指明字类型,执行后 SI = 01 SI+1=00,属性运算符PTR,用来指定地址操作数的类型。 格式: PTR 类型BYTE, WORD, DWORD, NEAR, FAR BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址 NEAR、FAR 用于描述转移、调用的目的地址,例6) :MOV BYTE PTRDI,0 ;字节类型 MOV WORD PTRDI,0 ;字类型 MOV

10、DI,0B5H ;类型不定 PTR也可用来进行强制类型转换 例:STR1 DW 1234H ;STR1定义为字类型 MOV AX,STR1 ;合法 MOV AL,STR1 ;非法 MOV AL,BYTE PTR STR1 ;合法,7.1.3 表达式与运算符(4), 分离运算符,LOW 取低字节 格式:LOW HIGH 取高字节 格式:HIGH ,例:设SSY=2050H MOV AL,LOW 3080H ;AL=80H MOV AH,HIGH SSY ;AH=20 MOV CL, LOW 3A4BH ;CL=4BH,7.2 伪指令,1. 符号定义伪指令(赋值语句)(1),格式: EQU 功能:

11、用符号来代表表达式的内容, 等价语句EQU,表达式可以是常数、数值表达式、字符串、存储器符号等,例:COUNT EQU 100 ;符号COUNT代表常数100 BUFF EQU 4*COUNT ;BUFF代表400 HELLO EQU “How are you! ” ;HELLO代表How are you VARW EQU THIS WORD ;变量VARW的类型是字,注意:等价语句的符号名不能被重新赋值,1. 符号定义伪指令(赋值语句)(2), 等号语句=,格式: = 功能:用符号来代表表达式的数值,数值表达式,例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIS

12、T = BYTE PTRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL,先定义,后引用,2. 内存数据定义伪指令(1), 字节定义语句DB,格式:名字 DB 功能:表达式值或项表中的每一项是一个字节数, 它们从符号名地址开始按字节连续存放。,例:COUNT DB 100 DB 0DH,0AH, VARW DB ?,6,?,?,可以使用重复操作符DUP如: BUFFER DB 8 DUP(0),符号地址,DUP可以嵌套如: ARRAY

13、DB 100 DUP(0,2 DUP(1,2),3),2. 内存数据定义伪指令(2), 字定义语句DW,格式:名字 DW 功能:表达式值或项表中的每一项是一个字数, 它们从符号名地址开始按字连续存放。,例:FLAG DW 2FCDH,24H DW ?,2. 内存数据定义伪指令(3), 四字节定义语句DD,格式:名字 DD 功能:表达式值或项表中的每一项是四个字节数,它们 从符号名地址开始按四字节从小地址连续存放。, 10字节定义指令DT,例1: DSEG1 SEGMENT DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFFBH DSEG1 E

14、NDS 汇编后的内存分配情况 如右图所示。,05H,10H,00H,01H,FCH,FFH,FBH,FFH,00H,00H,0AH,DSEG1: DATA_B,DATA_W,DATA_D,10,5,10H,100H,-4,0FFFBH,例2:操作数可以是字符串,例如 STR DB HELLO 汇编后的情况如图:,STR,H,E,L,L,O,注意下面两个定义的不同之处: X DB AB ;41H在低字节,42H在高字节 Y DW AB ;42H在低字节,41H在高字节,48H,45H,4CH,4CH,4FH,41H,42H,42H,41H,X,Y,例3: TABLE DB 10 DUP(?) B

15、UFFER DW TABLE,$+3 设TABLE的偏移地址为0080H,则汇编后如下图所示:,BUFFER,0080H,80H,TABLE,008AH 008BH 008CH 008DH 008EH,. . .,8FH,00H,00H,0089H,10 Bytes,程序计数器 $,程序计数器 $,3. 段定义伪指令(1),段定义的一般格式:, SEGMENT 定位方式连接方式类型名, ENDS,段开始语句,段结束语句,例:一个简单的数据段 DSEG SEGMENT BUFFER DB 8 DUP(0) DSEG ENDS,3. 段定义伪指令(2), 定位方式(定位类型) 书(P162),定位

16、类型指出了对当前段起始地址的要求,有4个选项,PAGE 指定起始地址的低8位是0,即其值能被256整除(称页边界) PARA 指定起始地址的低4为是0,即其值能被16整除(称段边界) WORD指定起始地址的最低位是0,即其值能被2整除(称为字边界) BYTE 指定起始地址是任意值,缺省定位,定位类型是用来确定程序段与程序段之间的衔接,如BYTE 使得当前段紧接前一段,而PAGE可能导致最大的段间隔,3. 段定义伪指令(3), 连接方式(组合类型),连接方式告诉连接程序本段可按某种方式连接,PUBLIC告诉连接程序本段与其它同名同类别 的段连接起来,公用一个起始点。 STACK 表示是堆栈段,连

17、接方式同上。 NONE 表示本段不与任何段连接。 COMMON表示本段与同名同类别的段共用同一段地址, 即同名同类段相重叠。 MEMORY本段连接时定位在所有段之上,即高地址处。 AT 表达式表示本段定位在表达式值指定的段地址处。,隐含连接方式,一个源程序至少有一个堆栈段,例:连接方式,Bmax,C(S),B(C),A(P),B(C),A,C(S),A(P),B(C),A,C2,C1,A1,A2,P,C,S,模块1,模块2,模块1,N,3. 段定义伪指令(4), 类别名,类别名是由程序员指定的字符串,没有给出类别时, 这个段的类别就为空。,例1:某个源程序,例2: 类别 用单引号括起来的字符串

18、。所有同类别的段被安排在连续的存储区域中。 如:给出类别时,在模块1中有段定义: seg1 SEGMENT PARA STACK stack seg1 ENDS 在模块2中有段定义: seg2 SEGMENT PARA STACK stack seg2 ENDS 则连接时这两个段被安排在一起。,PUBLICCODE,PUBLICCODE,COMMON DATA,COMMON DATA,AT 2000H,AT 8000H,4. 段寄存器说明伪指令,格式:ASSUME 段寄存器:段定义名1,段寄存器:段定义名2, 功能:告诉汇编程序在汇编时,段寄存器的符号基址,ASSUME伪指令,在代码段中,还必

19、须明确段和段寄存器的关系,这由ASSUME语句来指定。如 ASSUME CS:code, DS:data, ES:data 语句中的code和data为段名。 这个语句说明: 1. CS将指向名字为code的代码段 2. DS和ES将指向名字为data的数据段,但要注意,ASSUME伪指令只是告知汇编程序有关段寄存器与段的关系,并没有给段寄存器赋予实际的初值。故下面的语句 MOV AX,DATA MOV DS,AX MOV ES,AX 将段基址装入段寄存器。如果程序中用到堆栈段,则SS也需装入实际的初值。 代码段基地址不需要程序员装入CS寄存器,而由DOS负责装入。,5. 过程(子程序)定义伪

20、指令,格式: PROC 过程属性 ENDP,段间为FAR 段内为NEAR,XXX SEGMENT main proc far call subr1 ret main endp subr1 proc near ret subr1 endp XXX ENDS,XXX SEGMENT main proc far call subr1 ret subr1 proc near ret subr1 endp main endp XXX ENDS,例1: 调用程序和子程序在同一代码段中,一个过程,一个过程,例2: 调用过程和 子过程不在 同一个代码 段内,SEGX SEGMENT subt proc far

21、 ret subt endp call subt SEGX ENDS SEGY SEGMENT call subt SEGY ENDS,所以过程属性为FAR,6. 模块开始伪指令,格式:NAME 模块名 书(P182),8. 定位伪指令,格式:ORG 功能:把以下语句定义的内存数据或程序,从表达式 指定的起点开始连续存放。,例: ABC SEGMENT ORG 100H begin: ABC ENDS,10. 系统隐含进位制伪指令,格式:RADIX 表达式 功能:改变隐含进制数,11. 连接模块引用伪指令(1),格式:PUBLIC 功能:本模块用PUBLIC说明了的符号名,可以被其它程 序模块

22、引用, 公用符号语句PUBLIC,变量名、标号、过程名、符号常量, 公用符号语句PUBLIC (P182)例: 引用符号语句EXTRN,PUBLIC 5,EXTRN,二级模块,PUBLIC 6,EXTRN,二级模块,PUBLIC 4,EXTRN,二级模块,PUBLIC 7,EXTRN,二级模块,PUBLIC 2,EXTRN 5,6,一级模块,PUBLIC 3,EXTRN 6,7,一级模块,PUBLIC 1,EXTRN 4,5,一级模块,NAME XX,EXTRN 1,2,3,主模块,NAME 4,NAME 5,NAME 6,NAME 7,NAME 3,NAME 2,NAME 1,12. 块注释

23、伪指令,格式:COMMENT 定界符 注释 定界符 功能:为模块程序加注释,自定义的非空格符,7.3 宏指令,宏指令:为了简化汇编语言源程序的书写提供的指令,宏指令的使用要经过三个步骤: 宏定义:对各个宏指令进行定义,并分别起一个名字 宏调用:在需要的地方,通过宏指令名来调用它 宏展开:由汇编程序用宏定义中的指令替代宏指令名,由汇编程序完成的,1. 宏代换语句,格式:宏名 MACRO 形式参数1,形式参数2, ENDM 功能:为指令序列定义一个宏名,称宏指令,宏体,形式参数是任选项,可以用来代换宏体中的某些参数 或符号。需要代换的符号前,必须加一个宏代换符&,象指令一样出现在程序中,2. 局域

24、符号定义语句,格式:LOCAL 符号1,符号2, 功能:指出符号仅在宏代换中有意义 (目的是避免在宏展开时引起符号重复),例:AA MACRO LOCAL LP1 LP1 : ADD AL,30H ENDM,3. 删除宏定义语句,格式:PURGE 宏定义名1,宏定义名2, 功能:告诉汇编程序取消某些宏。使之在宏调用的 地方不再生成宏展开。,5. 重复定义语句,格式1:REPT ENDM 格式2:IRP 形式参数, ENDM 格式3:IRPC 形式参数,字符串 ENDM,功能:重复执行指令序列,重复次数由语句决定,表达式是重复次数,参数个数是重复次数,重复一次将一个参数代入形式参数中,字符串中字

25、符数是重复次数,重复一次代入一个字符到形式参数,7.4 系统功能调用,调用方法: 准备入口参数 把功能调用号送AH寄存器 发软中断指令 INT 21H,1. 键盘输入单字符01H号功能调用,功能:从键盘读一字符,并将该字符回显在显示器上 入口参数:无 出口参数:AL=读到字符的ASCII码 说明:如果读到的字符是Ctrl+c或Ctrl+Break则结束程序,例: MOV AH,1 INT 21H ,2. 键盘输入字符串0AH号功能调用,功 能:从键盘读一字符串。 入口参数: DS:DX=缓冲区首址,缓冲区的第 一个字节放缓冲区最大容量数 出口参数:接收到的字符串放在缓冲 区中第三个字节开始 说

26、 明: 缓冲区第二个字节存放实际读入 的字符数。 字符串以回车结束(0DH) 如果输入字符串超过了缓冲的区容 量, 超出的部分丢失,同时响铃 如果在输入时按Ctrl+C或Ctrl+Break,则结束程序,例: BUF DB 20 ;缓冲区最大容量数 DB ? ;存放实际读入的字符数 DB 20 DUP(?) MOV DX,OFFSET BUF MOV AH,0AH INT 21H ;输入字符串 ,3. 输出单字符02H号功能调用,功能:寄存器DL中的字符从屏幕上显示输出 入口参数:DL=要输出字符的ASCII码 出口参数:无,例: MOV DL,A MOV AH,2 INT 21H ,4. 输

27、出字符串09H号功能调用,功 能:将指定缓冲区中的字符串从屏幕上显示输出 入口参数:DS:DX=要输出字符的首址,字符串以字符 为结束标志 出口参数:无,5. 直接控制台输入/输出单字符06H号功能调用,功 能:直接键盘输入屏幕显示输出 入口参数:DL=OFFH,表示输入;否则表示输出, DL=输出字符代码 出口参数:输入时,AL=输入字符代码,输出时,无,例: MOV DL,0FFH MOV AH,6 INT 21H MOV DL,a MOV AH,6 INT 21H ,键盘输入单字符送AL,将DL的内容送屏幕显示,说明:1、在输入时,如无字符可读,不等待 2、不检查Ctrl+C或Ctrl+

28、Break键 3、在读到字符时也不回显,6. 无回显直接控制台输入单字符07H号功能调用,功 能:从键盘上读一个字符到AL 入口参数:无 出口参数:AL=读到字符的代码,8. 从串口输入单字符03H号功能调用,功 能:从异步通信口串行输入的字符到AL中 入口参数:无 出口参数:AL=读到字符的代码,10. 设置日期2BH号功能调用,功 能:设置有效日期 入口参数:CX=年号,DH=月号,DL=日期 都是装配型BCD码 出口参数:AL=0,表示设置成功;否则AL=0FFH,例: MOV CX,2008H MOV DH,04H MOV DL,14H MOV AH,2BH INT 21H ,11.

29、取得日期2AH号功能调用,功 能:将当前日期取到CX和DX寄存器中 入口参数:无 出口参数:CX=年号,DH=月号,DL=日期 都是装配型BCD码,12. 设置时间2DH号功能调用,功 能:设置有效时间 入口参数:CH=时数,CL=分数,DH=秒数, DL=百分之一秒数,都是装配型BCD码 出口参数:AL=0,表示设置成功;否则AL=0FFH,13. 取得时间2CH号功能调用,功 能:将当前时间取到CX和DX寄存器中 入口参数:无 出口参数:CX=时分,DH=秒,都是装配型BCD码,例: MOV AH,2CH INT 21H ,14. 返回操作系统4CH号功能调用,功 能:结束当前正在执行的程

30、序,并返回操作系统 入口参数:无 出口参数:无,回到DOS提示符下C:,例: MOV AH,4CH INT 21H ,(一)基本的汇编语言程序框架如下: stack SEGMENT PARA stack DB 100 DUP(stack) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data start: MOV AX, data MOV DS, AX MOV ES, AX MOV AX , stack MOV SS , AX MOV AL, 4CH INT 21H code ENDS E

31、ND start,堆栈段,数据段,代码段,15.INT 20H 指令来返回操作系统,.EXE文件装入内存时都产生一个PSP程序前缀段,里面是程序运行的一些基本信息,存放在程序的开始位置0-0FFH,PSP的长度是100H。 在程序装入存储器后,CS和IP、SS和SP四个寄存器的值会自动分配好,而DS和ES指向PSP的段基址。程序运行结束时,返回到PSP的开始位置执行 。,start: push ds sub ax,ax push ax ret,不可用存储区低端,程序前缀段PSP,INT 20,内存大小,程序模块 (可包括多个段),不可用存储区高端,.EXE文件装入内存 FAR,程序前缀段PSP

32、入口地址:DS:0;ES:0 100H个字节,功能调用,SP,SP,SP,DSL,DSH,00H,00H,(二)基本的汇编语言程序框架如下: stack SEGMENT PARA stack DB 100 DUP(?) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data , SS:stack begin proc far start push ds sub ax,ax push ax MOV AX, data MOV DS , AX MOV ES , AX MOV AX , stack

33、MOV SS , AX ret begin endp code ENDS END start,堆栈段,数据段,代码段,.COM文件装入内存时都产 生一个PSP程序前缀段,里面 是程序运行的一些基本信息, 存放在程序的开始位置0-0FFH, PSP的长度是100H。,不可用存储区低端,程序前缀段PSP,程序模块 (只能有一个段) 堆栈,不可用存储区高端,.COM文件装入内存 NEAR,内存大小,程序前缀段PSP入口地址:DS:0;ES:0; SS:0 ;CS:0 100H个字节,功能调用,属性,.EXE文件,.COM文件,许可的段数,多个段,只能有一个段,段引用,可以引用,无,无,堆栈段,必须定

34、义,程序代码起点,不要求,ORG 100H,程序大小,可为任意大小,小于64K,PSP地址,初始化时赋给ES和DS,初始化时赋给ES,DS,SS和CS,重定位信息,需要,不需要,(三)基本的汇编语言程序框架如下: 例(P190),堆栈段,数据段,代码段,code SEGMENT ASSUME CS:code, DS:code, ES:code ORG 100H begin proc near MOV AX, CS MOV DS, AX MOV ES, AX INT 20H begin endp code ENDS END begin,例1:,从键盘接收并显示一个字符串,回车,换行后再次显示输入

35、的字符,Stack segment stack dw 32 dup(?) stack ends data segment OBUF DB , 0DH, 0AH, $ IBUF DB 0FFH, 0, 255 DUP(?) data ends code segment assume ds:data,cs:code,ss:stack begin proc far start: push ds sub ax,ax push ax mov ax,data mov ds,ax MOV DX, OFFSET OBUF MOV AH,9 INT 21H,MOV DX, OFFSET IBUF MOV AH,

36、10 INT 21H MOV BL, IBUF+1 MOV BH, 0 MOV IBUFBX+2, $ MOV DL,0AH MOV AH, 2 INT 21H MOV DX, OFFSET IBUF+2 MOV AH, 9 INT 21H ret Begin endp code ends end start,;堆栈段定义,;代码段定义,;段声明,;过程定义,;初始化段寄存器,;主子程序返回,;源程序结束,;数据段定义,;程序段前缀入栈,;BX=实际字节串长,;显示提示符,;键入字符串,;换行,;再次显示字符串,汇编程序编程应注意的问题,任何一个源程序必须至少有一个代码段,其它段视程序要求而定

37、。 段寄存器的装填(DS、ES、SS由用户自行装填,CS不须用户处理)。 方法: MOV AX,* MOV DS,AX (或ES、SS) DOS下汇编程序的正常结束 方法1: MOV AH,4CH INT 21H 方法2: 程序名: PROC FAR PUSH DS MOV AX,0 PUSH AX . RET 程序名 ENDP,例2:在CRT上循环显示0-98之间的十进制数。(实验4B),DATA SEGMENT BUF DB 3 DUP(?) DATA ENDS,CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN PROC FAR PUSH DS MOV A

38、X,0 PUSH AX MOV AX , DATA MOV DS , AX MOV BL,-1 PUSH BX ;保护BL NEXT: MOV SI,OFFSET BUF MOV DL,0DH;回车符 MOV AH,2 INT 21H ;送显示,mov dl,0ah ;输出换行符 mov ah,2 int 21h pop bx ;取出bl mov al, bl ;产生十进制数 inc al daa cmp al,99h jc next1 ;al低于99H转Next1 mov al, 0 Next1: mov bl,al push bx ;暂存bl(十进制数) mov dl,al ;十进制数转A

39、SCII mov cl,4 ;高4位转ASCII shr al,cl or al,30h mov si,al,inc si mov al,dl ;低4位转ASCII and al,0fh or al,30h mov si,al inc si mov al,$ mov si,al ;字符串结束符 mov dx,offset buf ;9号调用送显示 mov ah,9 int 21h mov cx,0ffffh ;延时 Dy: loop dy jmp next ret Main endp code ends end main,7.5.1 汇编程序的功能,(EDIT)汇编语言 源文件(.ASM),汇

40、编程序 (MASM或ASM),目标代码文件.BOJ,列表文件.LST,交叉索引文件.CRF,输入,翻译,输出,汇编程序的功能就是把用助记符书写的汇编语言源程序, 翻译成机器语言目标代码;同时进行语法检查,指出语 法错误所在行的行号。,在计算机上运行汇编语言程序的步骤,用编辑程序建立XX.ASM程序 用汇编程序把XX.ASM程序转换成XX.OBJ程序 用连接程序把XX.OBJ程序转换成XX.EXE程序 用调试程序调试程序 XX.EXE 用DOS命令直接键入程序名执行,文本编辑EIDT,汇编程序MASM,连接程序LINK,DEBUG,编辑源文件(用EDIT),文件存盘,用MASM汇编源文件(.AS

41、M),生成目标代码文件(.OBJ),开始,有语法错?,用LINK连接目标代码文件,生成可执行文件(.EXE),有语法错?,在DOS下执行.EXE文件,程序运行有错?,调试文件(DEBUG),结束,Y,Y,Y,7.5.2,程序的编辑、汇编及连接,扩展名为 .ASM的文件,1. 编辑程序,EDIT 文件名.ASM 回车,在DOS方式下,输入程序 存盘,上机步骤:,DATA SEGMENT ;存放数据项的数据段 DATA ENDS EXTRA SEGMENT ;存放数据项的附加段 EXTRA ENDS STAC SEGMENT PARA STACK ;作堆栈用的堆栈段 STAC ENDS COSEG

42、 SEGMENT ASSUME CS:COSEG,DS:DATA ASSUME SS:STAC,ES:EXTRA BEING:MOV AX,DATA MOV DS,AX ;存放指令序列 COSEG ENDS END BEING,7. 6,汇编语言程序设计,构造一个源程序的基本格式:,DEBUG程序命令(1),A命令(汇编命令) 格式:A 地址 功能:从指定地址把宏汇编语言语句直接汇编入内存,2. D命令(显示命令) 格式:D 地址 或 D 范围 功能:从指定地址开始显示内存中80H字节的内容, 或显示指定范围的内容,DEBUG程序命令(2),G命令(执行命令) 格式:G =起始地址断点地址表

43、功能:从当前地址或指定地址执行遇到断点停止执行,R命令(寄存器命令) 格式:R ;显示所有寄存器的内容 R 寄存器名 ;显示并可修改寄存器的内容 RF ;显示并可修改标志寄存器的内容,Q命令(停止命令) 格式:Q 功能:退出DEBUG程序,不保存内存中调试的文件,DEBUG程序命令(3),T命令(跟踪命令) 格式:T =地址数值 功能:从当前地址或指定地址执行一条或指定的条数指令 并显示各寄存器的内容及下一条要执行的指令,U命令(反汇编命令) 格式:U 范围 或 U 地址 功能:把指定范围的内容反汇编或从指定地址开始反汇 编16条,DEBUG程序命令(4),格式:E 地址 表 功能:用表中的内容替换内存中一个或多个字节里的内容 (表中的数据以空格分隔,一个数据代表一个单元 的内容),8. E命令(修改内存单元命令),例:把当前数据段,100H开始的连续单元分别修改为 11H,22H,33H,44H,55H E 100 11 22 33 44 55,DEBUG中标志位的符号表示,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1