资源描述:
《微机原理与接口》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第四章汇编语言程序设计4.1汇编语言的语句格式4.2MASM中的表达式4.3伪指令语句4.4常用DOS系统功能调用和BIOS中断调用4.5程序设计方法第四章汇编语言程序设计汇编语言:用指令的助记符、标号、伪指令等书写程序的语言。汇编语言源程序:用汇编语言书写的程序。汇编:把汇编语言源程序翻译成在机器上能执行的机器语言程序(称目标程序)的过程。汇编程序:完成汇编过程的程序。汇编语言是面向计算机硬件的语言,和机器密切相关,采用不同CPU的计算机,通常有不同的汇编语言。第四章汇编语言程序设计一个汇编语言实例:DATASEGMENTBLOCKDB
2、43H,0ABH,…PDATADB20DUP(?)NDATADB20DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AXLEASI,BLOCKLEADI,PDATALEABX,NDATACLDMOVCX,PDATA-BLOCKGOON:LODSBTESTAL,80HJNZMINUSSTOSBJMPAGAINMINUS:XCHGBX,DISTOSBXCHGBX,DIAGAIN:LOOPGOONCODE
3、ENDSENDSTART4.1汇编语言的语句格式[名字]操作码/伪指令[操作数][;注释]各部分之间至少要用一个空格作为间隔,其中名字是一个符号,它可以是标号或变量,由英文字母、数字及专用字符组成,最大长度不能超过31个,且不能由数字打头,不能用保留字(如寄存器名,指令助记符,伪指令)。操作码:是一个助记符,它可以是指令、伪指令(又叫伪操作)或宏指令。操作数:参加本指令运算的数据。可以是常数、变量、标号(统称数据项P127)、寄存器名、表达式。4.1汇编语言的语句格式[名字]操作码/伪指令[操作数][;注释]汇编语言源程序中的语句主要有两
4、种类型:指令性语句(P127):其格式为指示性语句(P127),又叫伪指令,其格式为:指令性语句是计算机可执行的。而指示性语句不能执行,只用来定义变量,分配存储单元,指示程序开始和结束等,为计算机提供必要的信息。这两种语句的差别:汇编时能否形成对应的机器码。[标号:][前缀]指令助记符[操作数][;注释]变量伪指令指示符操作数[,,];注释表达式是常数、寄存器、标号、变量与一些运算符组合的序列。4.2MASM中的表达式汇编时按一定的优先规则对表达式进行计算后可得到一个数值或一个地址。算术运算符(ArithmeticOperators)逻辑
5、运算符(LogicalOperators)关系运算符(RelationalOperators)数值返回运算符(Value-ReturningOperators)修改属性运算符(ModifingattributeOperators)其它运算符(OtherOperators)教材P129表4-1给出了MASM中可采用的运算符号。一、算术运算符有+、-、*、/,MOD,SHL、SHR。其中MOD表示除法运算后得到的余数。例:19/7的商是2;19MOD7则结果为5(余数)算术运算符可以用于数字表达式。例:MOVAL,2*7汇编后为B0H,0EH
6、算术运算符也可以用于地址表达式,但对地址运算的结果应有明确的物理意义。例如,两个地址的乘或除无意义,而加或减则可以。例:LEASI,SUM+3表示变量SUM的地址加上3得到的和作为新的存储器地址。AND、OR、XOR和NOT,它们只能用于数字表达式中。二、逻辑运算符例:MOVCL,36HAND0FH经汇编后结果等同于:MOVCL,06H这些逻辑运算符也是8086/8088的指令助记符,但不会造成混乱,前者在汇编时进行,而后者在指令执行时进行的。例:ANDDX,PORT_VARAND0FEH后一个逻辑运算符AND在汇编时进行,若PORT_V
7、AR为81H,则汇编后表达式算出为80H.执行前一个指令助记符AND时,将(DX)与80H相与,结果在DX中。共有6个:EQ、NE、LT、LE、GT、GE。三、关系运算符关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址。例:MOVBX,PORT_VALGE5若PORT_VAL的值大于等于5,则汇编后结果等效为:MOVBX,0FFFFH若PORT_VAL的值小于5,则汇编后结果等效为:MOVBX,0关系为真,结果为0FFFFH,或0FFH关系为假,结果为0它可以把存储器一些特征作为数值送回。四、数值返回运算符(分析运算符)O
8、FFSET、SEG、TYPE、LENGTH、SIZE。1.OFFSET注意与MOVSI,STRI1的差别。但它与LEASI,STRI1类似。SEG运算符用来取存储单元的段值。例:MOVAX,S