收藏 分销(赏)

微机计算原理.pptx

上传人:胜**** 文档编号:1651763 上传时间:2024-05-07 格式:PPTX 页数:51 大小:594.95KB
下载 相关 举报
微机计算原理.pptx_第1页
第1页 / 共51页
微机计算原理.pptx_第2页
第2页 / 共51页
微机计算原理.pptx_第3页
第3页 / 共51页
微机计算原理.pptx_第4页
第4页 / 共51页
微机计算原理.pptx_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、7.1 概述概述汇编语言程序的上机处理过程汇编语言程序的上机处理过程主要的汇编程序:主要的汇编程序:MASM【例例7.1】(1)设计要求设计要求:在源程序中设置数据段、堆栈段及代码段。在源程序中设置数据段、堆栈段及代码段。在数据段中定义在数据段中定义8个字节数据,把这些数据转换成十个字节数据,把这些数据转换成十六进制数的六进制数的ASCII码存在上述数据之后,码存在上述数据之后,然后在屏幕上显示这些数据。显示数据用然后在屏幕上显示这些数据。显示数据用DOS功能功能2号调用,每个数据用空格分隔。号调用,每个数据用空格分隔。(2)程序流程:程序流程:程序流程如图程序流程如图7.6和图和图7.7所示

2、。所示。图图7.6图图7.7NAME EX1DAT SEGMENT PARA DAT A1 DB 12H,34H,56H,78H,9AH DB 0BCH,0DEH,0F0H B1=$-A1 ;求出;求出$到到A1所占的字节数所占的字节数 B2=B1*2 A2 DB B2 DUP(?);定义;定义B2个内存空间个内存空间DAT ENDS注:注:$:当前数据指针,是一个偏移地址值;:当前数据指针,是一个偏移地址值;未用内存数据定义伪指令定义的变量不占内存空未用内存数据定义伪指令定义的变量不占内存空间,因而间,因而B1、B2不占内存空间,不占内存空间,例例7.17.1程序运行结果显示:程序运行结果显

3、示:12 34 56 78 9A BC DE F012 34 56 78 9A BC DE F0(3)程序清单:二进制数对十六进制数转换及显示主程序:程序清单:二进制数对十六进制数转换及显示主程序:1、常量常量二进制二进制xxxxxxxxB01000101B八进制八进制xxxO 或或xxxQ721O或或721Q十进制十进制xxxx或或xxxxD1991或或1991D十六进制十六进制xxxxH0F1D4H字符串字符串xxx AB常出现在指令和伪指令中常出现在指令和伪指令中 7.1.1 常量、变量和标号常量、变量和标号7.1 宏汇编语言的基本语法宏汇编语言的基本语法 常量常量在程序中,常数主要出现

4、在:在程序中,常数主要出现在:(1)指令语句中源操作数中作立即数,它应与目的操作数的指令语句中源操作数中作立即数,它应与目的操作数的位数相一致,可以是位数相一致,可以是8位或位或16位,例如:位,例如:MOVAX,0A5F1H(2)在指令语句的基址加变址的寻址方式中作位移量,例如:在指令语句的基址加变址的寻址方式中作位移量,例如:MOVBX,SI+32H(3)在数据定义伪指令中,例如:在数据定义伪指令中,例如:DB12H ;定义一个字节数据定义一个字节数据 DW 1234H ;定义一个字数据定义一个字数据 DD12345678H;定义一个双字数据定义一个双字数据 DBA B C D ;定义定义

5、4个字节的字符串数据个字节的字符串数据2、标号(作为操作数的标号)、标号(作为操作数的标号)指令存放单元的符号地址指令存放单元的符号地址,是转移是转移/调用调用/循环指循环指令的操作数令的操作数标号的三种属性:标号的三种属性:段段 SEG偏移量偏移量 OFFSET距离距离 NEAR/FAR 标号标号2.标号的定义标号只在代码段中定义和使用,定义的方式有两种:(1)书写在符号指令前,用:定义,为NEAR类型,NEAR型标号只能在段内使用!例:ABC:MOV AL,SI ;定义近标号CYCLE(2)用PROCENDP伪指令定义过程名例:ABC PROC FAR;定义过程名ABC为FAR型标号 AB

6、C ENDP在汇编中都使用变量和地址表达式来表示存储器的地址。变量是存储器中的数据或数据区的符号表示。变量名是数据的地址或数据区的首地址。地址表达式由变量、标号、寄存器、常量和运算符组成。寄存器只能是16位的SI、DI、BX、BP和32位的通用寄存器,且寄存器必须位于 中。3.3.变量变量(1)变量和地址表达式)变量和地址表达式(1)段基址定义变量所在段的段首地址的高16位 由SEG算符指定如:SEG W ;取变量W的段基址(2)偏移地址变量所在段的段首址到该变量的字节距离.由OFFSET算符指定如:OFFSET W ;取变量W的偏移地址(2)变量的属性(3)类型存取该变量中数据的字节数变量的

7、类型有:字节(byte),字(word),双字(dword)数据存放规律数据存放规律字节数据字节数据-一个字节单元存放一个字节单元存放字数据字数据-二个字节单元存放二个字节单元存放双字数据双字数据-四个字节单元存放四个字节单元存放规定:规定:(1)(1)“低对低低对低,高对高高对高”(2)(2)低位字节的地址为字的地址低位字节的地址为字的地址(3)变量存储区中数据的存放)变量存储区中数据的存放在数据段或附加数据段中用伪指令定义变量名 DB 表达式,;定义字节变量变量名 DW 表达式,;定义字变量变量名 DD 表达式,;定义双字变量变量名 DQ 表达式,;定义四字变量数据定义伪指令指明了变量的类

8、型表达式确定变量的初值。表达式有如下6种:(4)变量的定义变量变量(1 1)表达式为常量或数值表达式)表达式为常量或数值表达式存入数值存入数值 如:如:W1W1 DWDW 1 1(2 2)表达式为)表达式为ASCIIASCII字符串字符串 存入存入ASCIIASCII值值 如:如:W2W2 DWDW AB;用用DWDW定义时,串长不可大于定义时,串长不可大于2 2 B2B2 DBDB AB$;用用DBDB定义时,串长可大于定义时,串长可大于2 2(3 3)表达式为重复子句)表达式为重复子句 格式:格式:N DUPN DUP(表达式)(表达式)如:如:B3B3 DBDB 2 2 DUP(0)DU

9、P(0)B4B4 DBDB 2 2 DUP(5,A)DUP(5,A)变量的定义(4 4)地址表达式)地址表达式(只适用只适用DW、DD和和DF3个伪指令个伪指令)格式:格式:变量名变量名 DW DW 地址表达式地址表达式 ;取其偏移地址取其偏移地址来初来初 ;始化变量始化变量 变量名变量名 DD DD 地址表达式地址表达式 ;取取1616位偏移地址和段位偏移地址和段 ;基址基址来初始化其变量来初始化其变量 变量名变量名 DF DF 地址表达式地址表达式 ;取取3232位偏移地址和段位偏移地址和段 ;基址基址来初始化其变量来初始化其变量(5 5)由以上表达式组成的序列,之间用)由以上表达式组成的

10、序列,之间用,分隔分隔 B5 B5 DBDB 1,2,31,2,3 变量、标号以及由其组成的地址表达式均有类型属变量、标号以及由其组成的地址表达式均有类型属性。地址表达式的类型属性由其中的变量或标号(性。地址表达式的类型属性由其中的变量或标号(一个一个地址表达式不可能同时含有变量和标号地址表达式不可能同时含有变量和标号)决定。不含变)决定。不含变量或标号,仅含寄存器的地址表达式没有类型属性。可量或标号,仅含寄存器的地址表达式没有类型属性。可以使用以使用PTRPTR算符临时变更原地址表达式的类型属性算符临时变更原地址表达式的类型属性,或者或者明确没有类型属性的地址表达式的类型,而仍明确没有类型属

11、性的地址表达式的类型,而仍保持保持它们它们原来的段基址和偏移地址属性不变。原来的段基址和偏移地址属性不变。格式:格式:类型类型 PTR PTR 地址表达式地址表达式如:如:BYTEBYTE PTR BX+5 PTR BX+5 ;明确类型;明确类型 WORDWORD PTR B2 PTR B2 ;临时变更;临时变更5.5.地址表达式类型的变更地址表达式类型的变更7.1.2 表达式与运算符表达式与运算符表达式由表达式由操作数操作数和运算符组成,在汇编的时,和运算符组成,在汇编的时,一个表一个表达式得到一个值达式得到一个值操作数可以是寄存器、常量(数值常量、符号常量)、操作数可以是寄存器、常量(数值

12、常量、符号常量)、存储器操作数(标号、变量)存储器操作数(标号、变量)运算符包括:算术运算符、逻辑运算符、关系运算符、运算符包括:算术运算符、逻辑运算符、关系运算符、数值返回运算符和属性运算符数值返回运算符和属性运算符注:表达式中的运算符是一种伪操作,也是由汇编程注:表达式中的运算符是一种伪操作,也是由汇编程序来完成的,不要将它与指令混淆了序来完成的,不要将它与指令混淆了 1.算术运算符算术运算符+,-,*,/是加减乘除运算符。是加减乘除运算符。MOD是除法取余运算符。例如,是除法取余运算符。例如,32 MOD 52。SHL是左移操作符。例如,是左移操作符。例如,21H SHL 284H。SH

13、R是右移操作符。是右移操作符。2.逻辑运算符逻辑运算符AND是逻辑是逻辑“与与”操作符。例如,操作符。例如,24H AND 0FH04H。OR是逻辑是逻辑“或或”操作符。例如,操作符。例如,24H OR 0FH2FH。XOR是是“异或异或”操作符。例如,操作符。例如,24H XOR 0FH2BH。NOT是逻辑是逻辑“非非”操作符。例如,操作符。例如,NOT 24H0DBH。3.关系运算符关系运算符关系运算是逻辑判定式的,当为关系运算是逻辑判定式的,当为“真真”时结果取时结果取0FFFFH,当为,当为“假假”时结果取时结果取0。关系运算是数。关系运算是数值型的。值型的。EQ等于。例如,已赋给符号

14、等于。例如,已赋给符号PP为为25,则,则25 EQ PP0FFFFH。EQ,NE,LT,LE,GT,GE4.分析运算符分析运算符SEG 变量变量/标号标号(求段基址)(求段基址)OFFSET 变量变量/标号(求偏移地址)标号(求偏移地址)MOV SI,OFFSET S1MOV SI,OFFSET S1 (LEA SILEA SI,S1S1)MOV DI,OFFSET S2MOV DI,OFFSET S2 (LEA DILEA DI,S2S2)TYPE 变量变量/标号(标号(P159 表表 7-1)变量返回类型:变量返回类型:1:字节、:字节、2:字、:字、4:双字:双字标号返回类型:标号返回

15、类型:-1:NEAR、-2:FARSIZE 符号名符号名(求为符号名分配的(求为符号名分配的字节数字节数,为,为符号名定义的数据项必须是由符号名定义的数据项必须是由DUP()定义的)定义的)LENGTH 符号名符号名5.组合运算符(改变、建立符号名的新类型)组合运算符(改变、建立符号名的新类型)(1)定义符号为新类型)定义符号为新类型格式:格式:类型类型 PTR 符号名符号名MOV AX,WORD PTR D1(2)指定新类型)指定新类型格式:格式:THIS 类型类型LABC EQU THIS BYTE(新类型)(新类型)LABD DW 4321H,2255HMOV AL,LABC ;AL=2

16、1HMOV AX,LABD ;AX=4321H分离运算符分离运算符(1)LOW 取低字节取低字节格式:格式:LOW 表达式表达式(2)HIGH 取高字节取高字节格式:格式:HIGH 表达式表达式P160 例例:设设SSY=2050H MOV AL,LOW 3080H;AL=80H MOV AH,HIGH SSY;AH=20H MOV CL,LOW 3A4BH;CL=4BH7.2 伪指令伪指令(Directive)不由不由CPU 来执行而由汇编(来执行而由汇编(MASM)来识别的)来识别的指令称为伪指令,指令称为伪指令,伪指令没有对应的机器指令伪指令没有对应的机器指令,其格式为,其格式为 标号标

17、号 伪指令伪指令 操作数操作数 ;注释;注释 1、符号定义伪指令、符号定义伪指令 EQU、=表达式的值赋给符号名表达式的值赋给符号名注意注意:该语句把表达式的值赋给符号名,在同一程序中,用该语句把表达式的值赋给符号名,在同一程序中,用EQU语语句赋值的符号名不能被重新赋值,但用句赋值的符号名不能被重新赋值,但用“”号赋值的符号名号赋值的符号名可以被重新赋值。可以被重新赋值。该定义不占内存空间该定义不占内存空间。7.2 伪指令伪指令(Directive)注意:注意:表达式或数据项表多于一项时,项与项之间用逗号表达式或数据项表多于一项时,项与项之间用逗号“,”或空格分隔,表达式或数据项重复书写时,

18、可用重复格式简写。或空格分隔,表达式或数据项重复书写时,可用重复格式简写。定义重复数据操作符定义重复数据操作符DUP必须与必须与DB、DW、DD、DQ配合使用。配合使用。2 2、内存数据定义伪指令、内存数据定义伪指令:DBDB、DWDW、DDDD、DQDQDB:表达式值或项表中的每一项是一个字节数,它们从符号名地址表达式值或项表中的每一项是一个字节数,它们从符号名地址开始按字节连续存放开始按字节连续存放 例,例,B1 DB 20H DUPB1 DB 20H DUP(?)(?)B2 DB 2 DUPB2 DB 2 DUP(3 DUP3 DUP(ABCABC),括号内是重复的内容),括号内是重复的

19、内容7.2 伪指令伪指令3.段定义伪指令段定义伪指令存储器在逻辑上是分段的,各段的定义由伪指令实现。存储器在逻辑上是分段的,各段的定义由伪指令实现。格式:格式:段名段名SEGMENT定位方式连接方式定位方式连接方式类别名类别名 段名段名ENDS段定义伪指令为程序的汇编和连接说明了段名、分段的各种属性以段定义伪指令为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束。段名是自定义符,开始的段名与结束的段名及分段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过必须相同。段的长度不超过64KB。SEGMENT后面的参数是可选项。后面的参数是可选项。(P163)

20、4.段寄存器说明伪指令段寄存器说明伪指令格式:格式:ASSUME段寄存器:段定义名段寄存器:段定义名1,段寄存器:段定义名,段寄存器:段定义名2,该伪指令告诉汇编程序在汇编时,段寄存器该伪指令告诉汇编程序在汇编时,段寄存器CS:,:,DS:,:,SS:和:和ES:应具有的符号段基址,以便汇编指令时确定段和建立:应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存器实际值错误信息。但是段寄存器实际值(CS除外除外)还要由传送指令在执行还要由传送指令在执行程序时赋值。程序时赋值。5、过程(子程序)定义伪指令、过程(子程序)定义伪指令格式:格式:过程名过程名PROC NEAR(FAR)

21、.过程名过程名ENDP (P162)8 8 定位伪指令定位伪指令 ORG 100HORG 100H该指令后面的一条指令语句或数据区定义命令从偏移该指令后面的一条指令语句或数据区定义命令从偏移地址为地址为100H100H处开始存放。处开始存放。1212、记录伪指令、记录伪指令:(1 1)记录定义伪指令:)记录定义伪指令:RECORDRECORD(2 2)记录存储单元分配及赋值)记录存储单元分配及赋值1313、结构伪指令、结构伪指令STRUCSTRUC ENDSENDS11.连接伪指令连接伪指令连接伪指令主要解决多模块的连接问题,对一个大程序来说,连接伪指令主要解决多模块的连接问题,对一个大程序来

22、说,往往要分模块编程,分模块调试,最后再系统连接与调试。往往要分模块编程,分模块调试,最后再系统连接与调试。连接伪指令为多模块连接进行说明。连接伪指令为多模块连接进行说明。(1)公用符号伪指令公用符号伪指令格式:格式:PUBLIC符号名符号名1,符号名,符号名2,本模块用本模块用PUBLIC伪指令说明的自定义符号名可由其他程序模块伪指令说明的自定义符号名可由其他程序模块引用,没有说明的符号名不能被其他模块引用。符号名可以是变引用,没有说明的符号名不能被其他模块引用。符号名可以是变量名、标号、过程名或符号常量等。量名、标号、过程名或符号常量等。(2)引用符号伪指令引用符号伪指令格式:格式:EXT

23、RN符号名符号名1:类型,符号名:类型,符号名2:类型:类型在本模块引用的在其他模块定义的符号名必须用在本模块引用的在其他模块定义的符号名必须用EXTRN进行说明,进行说明,否则不能引用。此外还应注意,所引用的外模块定义的符号名还否则不能引用。此外还应注意,所引用的外模块定义的符号名还应是用应是用PUBLIC伪指令说明过的。伪指令说明过的。(3)插入伪指令插入伪指令(或称包含伪指令或称包含伪指令)格式:格式:INCLUDE模块名模块名在本模块汇编时,把另一模块插入该伪指令处一起汇编,被插入的在本模块汇编时,把另一模块插入该伪指令处一起汇编,被插入的模块可以是不完整的。模块可以是不完整的。DS:

24、0000DS:000AHDAT SEGMENT ARRAY1 EQU 100AH ARRAY2 DB 12H,34H TABLE1 DW?TABLE2 DB 2 DUP(DEF)B1=$-TABLE1 DAT ENDS MOV AX,ARRAY1LEA SI,TABLE1 MOV SI,AX填写填写DS:0000-DS:000AH内存,并求内存,并求B1的值。的值。练习:练习:7.4 系统功能系统功能调用调用1、MS-DOS系统中的系统中的内部子程序内部子程序2、对汇编语言编程者来说是独立中断子程序,用软中、对汇编语言编程者来说是独立中断子程序,用软中断指令调用,它们的入口地址已由系统置入中断

25、入口断指令调用,它们的入口地址已由系统置入中断入口地址表中。地址表中。3、INT 21H 称为系统功能调用,共有称为系统功能调用,共有88个功能号个功能号4、使用格式、使用格式(1)入口参数)入口参数 指定寄存器(无参数的不用此句)指定寄存器(无参数的不用此句)(2)功能号)功能号 AH(3)INT 21H5、重点掌握、重点掌握 1、0AH、2、9、4CH 号号 调用格式:调用格式:MOV AHMOV AH,1 1 INT 21H INT 21H 入口:无入口参数入口:无入口参数 出口:出口:键入字符键入字符ASCIIASCII码值在码值在ALAL中中,回显该字符。,回显该字符。常用功能调用常

26、用功能调用(1)1号功能调用键入并显示一个字符 调用格式:MOV DL,待显示字符的ASCII MOV AH,2 INT 21H 入口:输出字符的ASCII 送 DL 出口:无出口参数例:显示字符 B MOV AH,2 MOV DL,B INT 21H(2)2号功能调用显示器显示一个字符 7.4 系统功能系统功能调用调用 调用格式:MOV DX,OFFSET BUF MOV AH,0AH INT 21H 入口:DS:DX置输入数据区首址,第一单元置允许键入的字符数(含回车符)出口:键入的实际字符数在第二单元中,键入的字符从第三单元开始存放(3)0A号功能调用键盘输入字符串 7.4 系统功能系统

27、功能调用调用 调用格式:MOV DX,待显示字符串的首偏移地址 MOV AH,9 INT 21H 入口:DS:DX置字符串首地址,字符串以结束 出口:无出口参数(4)9号功能调用显示器显示字符串7.4 系统功能系统功能调用调用例:显示 AZ 26个字符方法一:用2号功能调用,单个字符依次输出方法二:定义一个存储区,存放26个字符,并以$结束,用9号功能调用输出字符串OBUF DB ABCDXYZ$MOV DX,OFFSET OBUF MOV AH,9 INT 21HOBUFABZ$7.4 系统功能系统功能调用调用 调用格式:MOV AH,4CH INT 21H入口:无入口参数 出口:执行结果是

28、结束当前正在执行的程序,并返回操作系统。(5)4CH号功能调用返回操作系统注意:1.汇编中的“回车”操作仅将光标移至本行行首,故一般在10号功能调用后要输出一个换行0AH,将光标移至下一行的行首2.2号、9号、10号功能调用均会破坏AL中的内容,故为了防止AL中内容被破坏,在调用前应先保护AL,调用后再恢复7.4 系统功能系统功能调用调用7.5 汇编程序的功能及汇编过程汇编程序的功能及汇编过程(1)1.编辑汇编语言程序编辑汇编语言程序a.先通过附件进入先通过附件进入DOS状态状态 C:;b.D:CD MASM;进入进入D盘盘MASM子目录子目录 D:MASM;c.EDIT ABC.ASM (A

29、BC.ASM为文件名,用户可自为文件名,用户可自己取名,但后缀必须为己取名,但后缀必须为ASM)d.键入程序键入程序2汇编(汇编(MASM)源程序:)源程序:MASM ABC;(生成(生成ABC.OBJ 文件)文件)3程序连接程序连接:LINK ABC;(生成;(生成ABC.EXE 文件)文件)7.5汇编程序的功能及汇编过程汇编程序的功能及汇编过程(2)4执行程序:执行程序:ABC(注:本例无显示结果的程序段,(注:本例无显示结果的程序段,因而无法看到结果,要想看结果,必须使用因而无法看到结果,要想看结果,必须使用DEBUG程程序;序;5调试程序调试程序a.DEBUG ABC.EXE;(将(将

30、ABC.EXE文件调入内存并进文件调入内存并进入入DEBUG状态状态-)b.-U (显示程序,程序从(显示程序,程序从IP=0000处开始)处开始)c.-G (运行程序(运行程序ABC.EXE,运行完后回到,运行完后回到DEBUG状状态态-)d.查看程序结果:查看程序结果:-U0000 (显示程序,并从程序的第(显示程序,并从程序的第4句知数据段的句知数据段的段地址,例如段地址,例如0B4E-D4C28:0 0B4E:0000 7A 0A 07.7.6汇编语言源程序设计汇编语言源程序设计 8086汇编语言源程序的结构汇编语言源程序的结构DATA SEGMENT .DATA ENDSSTACK

31、SEGMENT STACK .STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:CODE ENDS END START数据段数据段堆栈段堆栈段代代码码段段8086的16位段模式的格式如下:stack segment stack stack dw 32 dup(0)stack endsdata segment data endscode segmentbegin proc far assume ss:stack,cs:code,ds:data push ds sub ax,ax push ax mov ax,data mov

32、ds,ax retbegin endpcode ends end begin宏汇编源程序的格式宏汇编源程序的格式【例例7.1】(1)设计要求设计要求:在源程序中设置数据段、堆栈段及代码段。在源程序中设置数据段、堆栈段及代码段。在数据段中定义在数据段中定义8个字节数据,把这些数据转换成十六个字节数据,把这些数据转换成十六进制数的进制数的ASCII码存在上述数据之后,码存在上述数据之后,然后在屏幕上显示这些数据。显示数据用然后在屏幕上显示这些数据。显示数据用DOS功能功能2号号调用,每个数据用空格分隔。调用,每个数据用空格分隔。(2)程序流程程序流程:程序流程如图程序流程如图7.6和图和图7.7所

33、示。所示。图图7.6图图7.7NAME EX1DAT SEGMENT PARA DAT A1 DB 12H,34H,56H,78H,9AH DB 0BCH,0DEH,0F0H B1=$-A1 ;求出;求出$到到A1所占的字节数所占的字节数 B2=B1*2 A2 DB B2 DUP(?);定义;定义B2个内存空间个内存空间DAT ENDS注:注:$:当前数据指针,是一个偏移地址值;:当前数据指针,是一个偏移地址值;未用内存数据定义伪指令定义的变量不占内存空未用内存数据定义伪指令定义的变量不占内存空间,因而间,因而B1、B2不占内存空间,不占内存空间,例例7.17.1程序运行结果显示:程序运行结果

34、显示:12 34 56 78 9A BC DE F012 34 56 78 9A BC DE F0(3)程序清单:二进制数对十六进制数转换及显示主程序:程序清单:二进制数对十六进制数转换及显示主程序:STAC SEGMENT PARA STACK STASTAC SEGMENT PARA STACK STA STA1 DW 100 DUP(?)STA1 DW 100 DUP(?)STAC ENDS STAC ENDS CODE SEGMENT PARA CODECODE SEGMENT PARA CODE ASSUME CS:CODE,DS:DAT ASSUME CS:CODE,DS:DAT

35、ASSUME SS:STAC,ES:DAT ASSUME SS:STAC,ES:DAT STAR PROC FAR STAR PROC FAR PUSH DSPUSH DS XOR AX,AX XOR AX,AX PUSH AX PUSH AX MOV AX,DATMOV AX,DAT MOV DS,AX MOV DS,AX MOV ES,AX MOV ES,AX ;执行后返回所需指令;执行后返回所需指令;赋段及偏移地址;赋段及偏移地址 LEA SI,A1 LEA DI,A2 28:MOV CX,B1 ;要转换的字节数;要转换的字节数 G1:MOV BL,2 ;每字节转换;每字节转换2次次 M

36、OV AL,SI MOV BH,AL;取出的数先暂存于;取出的数先暂存于BH PUSH CX MOV CL,4 ;先取出高;先取出高4位位 ROR AL,CL POP CX G2:AND AL,0FH DAA ADD AL,0F0H ADC AL,40H MOV DI,AL INC DI MOV AL,BH ;取回暂存数据准备取低;取回暂存数据准备取低4位位 DEC BL JNZ G2 ;一个字节未转换完;一个字节未转换完2次则转次则转G2 INC SI LOOP G1 MOV SI,OFFSET A1+1 MOV SI,OFFSET A1+1 MOV CX,B2 MOV CX,B2;CALL

37、 P1 CALL P1 RET RET G2:AND AL,0FH G2:AND AL,0FH DAA DAA ADD AL,0F0H ADD AL,0F0H ADC AL,40H ADC AL,40H;AL=07HAL=07H;AL=07HAL=07H;AL=F7HAL=F7H,CF=0CF=0;AL=37HAL=37H;AL=0AHAL=0AH;AL=10HAL=10H;AL=00HAL=00H,CF=1CF=1;AL=41HAL=41HP1P1 PROC PROC ;显示两数据、一个空格的子程序 MOV BLMOV BL,2 2;计数值 G:G:MOV DL,SIMOV DL,SI MO

38、V AH,2 MOV AH,2 INT 21H INT 21H INC SI INC SI DEC DECBLBL JNZ JNZT T MOV DL,MOV DL,MOV AH,2 MOV AH,2 INT 21H INT 21H MOVMOVBL,2BL,2 T T:LOOP GLOOP G RETRET ;系统功能调用(;系统功能调用(P169P169);显示空格;显示空格P1 ENDP P1 ENDP CODE ENDSCODE ENDS END STAR END STAR MOV AL,SIMOV AL,SI AND AND AL AL,0FH0FH MOV SI+1MOV SI+1

39、,ALAL MOV AL MOV AL,SISI MOV CL MOV CL,4 4 SHR AL,CL SHR AL,CL MOV SI+2MOV SI+2,ALAL CMP CMP AL AL,0AH0AH JC AB1 JC AB1 ADD AL ADD AL,7 7 AB1 AB1:ADDADD AL AL,30H30H CMP ALCMP AL,0AH0AH JC AB2 JC AB2 ADD AL ADD AL,7 7AB2AB2:ADD ALADD AL,30H30H ;转换成;转换成ASCIIASCII码码;转换成;转换成ASCIIASCII码码加加30H/37H30H/37H

40、:7.3 宏指令宏指令1、为了、为了简化简化汇编语言源程序的汇编语言源程序的书写书写,将一些频繁,将一些频繁出现的程序段定义为出现的程序段定义为“宏指令宏指令”,当遇到这个程序,当遇到这个程序段时,只需用一条宏调用语句代替。段时,只需用一条宏调用语句代替。2、汇编过程中要将宏指令所代替的程序段汇编成、汇编过程中要将宏指令所代替的程序段汇编成相应的机器代码并插入到源程序的目标代码中。相应的机器代码并插入到源程序的目标代码中。例如,例如,(1)宏定义宏定义SHIFT MACRO MOV CL,4 SAL AL,CL ENDM(2)宏调用宏调用 MOV AL,SI SHIFTDAT SEGMENT A1 DB 12H,34H A2 EQU 100AH T1 DW?T2 DB 2 DUP(ABC)B1=$-A1 DAT ENDS MOV AX,A2LEA SI,T1MOV SI,AX填写数据段内存,并求填写数据段内存,并求B1的值。的值。练习:练习:

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服