您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 微型计算机原理与接口技术 第4章
第4章汇编语言程序设计主要内容:汇编语言源程序的结构汇编语言语句格式伪指令功能调用汇编语言程序设计4.1汇编语言源程序了解:计算机的三种语言源程序的结构汇编语言语句格式一、计算机设计语言机器语言汇编语言高级语言面向机器的语言机器语言汇编语言高级语言汇编程序汇编语言源程序用助记符编写源程序的编译程序汇编程序汇编语言源程序机器语言目标程序汇编语言程序设计与执行过程输入汇编语言源程序源文件.ASM汇编(编译)目标文件.OBJ链接可执行文件.EXE调试最终程序二、汇编语言源程序结构数据段名SEGMENT…数据段名ENDS附加段名SEGMENT…附加段名ENDS堆栈段名SEGMENT…堆栈段名ENDS代码段名SEGMENT…代码段名ENDS三、汇编语言语句格式语句:[标号:][前缀]助记符[操作数],[操作数][;注释]指令的符号地址,标号后要有冒号操作码注释前加分号标号、名字标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。英文字母、数字及专用字符组成,最大长度不能超过31个,且不能由数字打头,不能用保留字(如寄存器名,指令助记符,伪指令)。操作码指令码命令CPU要完成的操作伪指令助记符指示汇编程序要完成的操作用来定义变量,分配存储单元指示程序开始和结束等注释用分号作为注释的开始用于说明程序或语句的功能,以便于阅读和理解操作数寄存器存储器单元常量变量或标号表达式常量数字常量字符串常量:用引号引起的字符或字符串例:’A’,’ABCD’汇编时被译成对应的ASCII码41H,42H,43H,44H变量代表内存中的数据区,程序中视为存储器操作数变量的属性:段值变量所在段的段地址偏移量变量单元地址与段首地址之间的位移量。类型字节型、字型和双字型五、表达式算术运算逻辑运算关系运算取值运算和属性运算其它运算算术运算和逻辑运算符算术运算符+,-,*,/,MOD逻辑运算符AND,OR,NOT,XOR例:MOVAL,8AND4MOVAL,8+4-1关系运算符参与关系运算的必须是两个数值;关系不成立,结果为0;关系成立,结果为FFFFH。EQNELTGTLEGE取值运算符OFFSET取得其后变量或标号的偏移地址SEG取得其后变量或标号的段地址TYPE取变量的类型LENGTH取所定义存储区的长度SIZE取所定义存储区的字节数取值运算符例MOVAX,SEGDATAMOVDS,AXMOVBX,OFFSETDATALEABX,DATA等价于取值运算符例若BUFFER存储区是用如下伪指令定义:BUFFERDW200DUP(0)则:TYPEBUFFER等于2LENGTHBUFFER等于200SIZEBUFFER等于400属性运算符属性运算符PTR用于指定其后存储器操作数的类型例:MOVBYTEPTR[BX],12H其它运算符方括号:[]方括号中内容为操作数的偏移地址段重设符段寄存器名:[]用于修改默认的段基地址4.2伪指令由汇编程序执行的“指令系统”用于定义变量、分配存储区、定义逻辑段、指示程序开始和结束等常用伪指令数据定义伪指令符号定义伪指令段定义伪指令过程定义伪指令结束伪指令一、数据定义伪指令用于定义数据区中变量的类型格式:变量名伪指令助记符操作数,…;注释某些情况下可省略可选数据定义伪指令伪指令助记符DB定义的变量为字节型DW定义的变量为字类型(双字节)DD定义的变量为双字型(4字节)DQ定义的变量为4字型(8字节)DT定义的变量为10字节型数据定义伪指令例DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD11H*2,22H,33445566H以上变量在内存中的存放形式数据定义伪指令伪指令的性质决定所定义变量的属性定义字符串必须用DB伪指令例:DATA1DB’ABCD’,66H‘A’‘B’‘C’‘D’41H42H43H44H66H重复操作符为一个数据区的各单元设置相同的初值格式:[变量名]伪指令助记符nDUP(初值,…)例:DW20DUP(0)DB3DUP(22H,11H,?)随机数用?预留存储空间MEM1DB34H,’A’,?,?,?DW20DUP(?)预留40个字节单元二、符号定义伪指令格式:符号名EQU表达式操作:用符号名取代后边的表达式,不可重新定义例:CONSTANTEQU100VAREQU30H+99HEQU说明的表达式不占用内存空间三、段定义伪指令说明逻辑段的起始和结束说明不同程序模块中同类逻辑段之间的联系形态段定义伪指令段名SEGMENT[定位类型][组合类型][’类别’]┇段名ENDS说明逻辑段的起点说明不同模块中同名段的组和连接方式定位类型PARA:段的起点从节边界开始(16个字节为1节)BYTE:段的起点从存储器任何地址开始WORD:段的起点从偶地址开始PAGE:段的起点从页边界开始(256个字节为1页)组合类型与其它模块中的同名段在满足定位类型的前提下具有的组合方式:NONE:不组合PUBLIC:依次连接(顺序由LINK程序确定)COMMON:覆盖连接STACK:堆栈段的依次连接AT表达式:段定义在表达式值为段基的节边界MEMORY:相应段在同名段的最高地址处段定义伪指令例DATASEGMENTPUBLIC’CODE’MEM1DB11H,22HDATAENDS四、设定段寄存器伪指令说明所定义逻辑段的性质格式ASSUME段寄存器名:段名[,段寄存器名:段名,…]五、结束伪指令表示源程序结束格式:END[标号]一个完整源程序结构例DSEGSEGMENTDATA1DB1,2,DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTSTACK‘STACK’DB200DUP(?)SSEGENDS一个完整源程序结构例CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AX┇CSEGENDSENDSTART源程序代码六、过程定义伪指令用于定义一个过程体格式:过程名PROC[NEAR/FAR]┇RET过程名ENDP过程入口的符号地址P166例七、其他伪指令ORG——段内程序代码或变量的起始偏移地址格式:ORG表达式例:ORG2000H计算值为非负常数4.3功能调用DOS功能调用高级调用,操作系统提供BIOS功能调用低级调用DOS功能调用包含多个子功能的功能包,用软中断指令调用,中断类型码固定为21H各子功能采用功能号来区分附录CDOS功能调用调用格式:MOVAH,功能号置相应参数INT21H1.从键盘输入单字符并显示调用方法:MOVAH,01INT21H输入的字符在AL中单字符输入例GET_KEY:MOVAH,1INT21HCMPAL,’Y’JZYESCMPAL,’N’JZNOJNZGET_KEYYES:┇NO:┇交互式应答程序2.从键盘输入字符串AH功能号0AHDS:DX字符串在内存中的存放地址INT21H定义字符缓冲区用户自定义缓冲区格式:0DHN1N2整个缓冲区最大键入字符数实际键入字符数输入字符串程序段DAT1DB20,?,20DUP(?)LEADX,DAT1MOVAH,0AHINT21H在数据段中定义输入缓冲区14H?20个字节定义后的输入缓冲区初始状态:52[例1]把存放在内存单元MBIN中的16位二进制数转换为BCD码,并存放在MBCD开始的内存单元中。P188START:LEASI,MBINDIVCXMOVAX,[SI]INCDILEADI,MBCDMOV[DI],DLMOVDX,0MOVDL,0MOVCX,0AHDIVCXDIVCXINCDIMOV[DI],DLMOV[DI],DLMOVDL,0INCDIDIVCXMOV[DI],ALINCDIHLTMOV[DI],DLMOVDL,053不能用16位除以8位的因为:AX/CX的余数—ALAX/CX的商—AH只有8位CX中的数小,商有的超过8位54[例2]两个3字长度的二进制数分别存放在内存单元BUFF1、BUFF2中,试求和并存放在SUM开始的内存单元中。P187START:MOVSI,OFFSETBUFF1MOVDI,OFFSETBUFF2MOVBX,OFFSETSUMMOVCX,3CLCGOON:MOVAX,[SI]MOV[BX],AXADCAX,[DI]INCBXINCSIINXBXINCSILOOPGOONINCDIHLTINCDI55[例3]把从MEM单元开始的100个16位无符号数从大到小的顺序排列。P179START:LEADI,MEMMOVDX,[SI]MOVBL,99MOV[SI-2],DXNEXT1:MOVSI,DIMOV[SI],AXMOVCL,BLNEXT3:DECCLNEXT2:MOVAX,[SI]JNZNEXT2ADDSI,2DECBLCMPAX,[SI]JNZNEXT1JNCNEXT3HLT56作业:1、把从MEM单元开始的100个16位无符号数从小到大的顺序排列。2、把存放在内存单元MBIN中的16位二进制数转换为压缩的BCD码,并存放在MBCD开始的内存单元中。
本文标题:微型计算机原理与接口技术 第4章
链接地址:https://www.777doc.com/doc-3178098 .html