您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 汇编-第6章 顺序程序设计
第6章顺序程序设计l熟悉汇编语言程序设计的基本步骤。l掌握程序流程图的使用,会利用其分析问题。l掌握汇编语言的顺序程序的设计。本章主要教学内容第6章顺序程序设计6.2顺序程序设计6.1汇编语言程序设计的基本步骤6.1汇编语言程序设计的基本步骤分析问题寻找解决问题的思路、方法、算法描述算法编写程序实现算法设计测试数据和预期计算结果上机调试程序6.2顺序程序设计顺序结构程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构特点顺序性、结构简单,只适应于简单问题的处理6.2.1十进制算术运算1.BCD码—建立了二进制与十进制的联系算术运算指令只能完成二进制运算,十进制数调整指令可对二进制运算结果进行调整,得到用BCD码表示的十进制数。BCD码有压缩和非压缩两种格式:压缩的BCD码:4位二进制数—1位十进制数(95:10010101)BCD非压缩的BCD码:8位二进制数—1位十进制数(95:0000100100000101)BCD8位非压缩BCD码的高4位可以是任意值,因此数字字符的ASCII码—看成一种非标准的压缩的BCD码例:5的ASCII码为35H(00110101)BCD—5(非压缩的BCD码)2.BCD码调整指令与十进制算术运算(1)压缩的BCD码调整指令DAA加法的十进制调整指令DAS减法的十进调调整指令在使用加、减法指令对BCD码运算后必须经调整后才能得到正确的结果。DAA加法的十进制调整指令执行的操作:把从AL中的和调整到压缩的BCD格式,这条指令之前必须执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在AL寄存器中。本指令的调整方法:如果AF标志(辅助进位位)为1,或者AL寄存器的低4位是十六进制的A–F,则AL寄存器内容加06H,且将AF位置入1。如果CF标志为1,或者AL寄存器的高4位是十六进制的A–F,则AL寄存器内容加60H,并将CF位置1。DAA指令对OF标志无定义,但影响所有其它条件标志。可见第一次得到的1101不是BCD码,根据调整规则应在其上加6,得到个位为3,并向高位进位的正确结果。28H+36H5EH分析:例1:十进制计算28+36=64用指令进行二进制加法运算的结果为:写成BCD码为:(00101000)BCD+(00110110)BCD=(01100100)BCD问题:逢十六进位解决方法:加6补偿5EH+6H64H(01100100)BCD例2:十进制计算28+69=97=(10010111)BCD=97H28H+69H91H问题:逢十六进位解决方法:加6补偿91H+6H97H(10010111)BCD例.ADDAL,BLDAA如指令执行前,(AL)=28,(BL)=6828001010006801101000+10010000执行ADD指令后(AL)=90,CF=0,AF=1执行DAA指令时.因AF=1而做(AL)〈一(AL)+06得(AL)=96,CF=0,AF=1结果正确。例.如(BCDl)=1834,(BCD2)=2789要求执行(BCD3)〈—(BCDl)十(BCD2)BCDl和BCD2均为用压缩的BCD码表示的十进制数,由于它们都是4位数,所以每个数占有2个字节,高位数占有高位字节,其存放方式为(BCDl)=34,(BCDl十1)=18;(BCD2)=89,(BCD2十1)=27。可写出指令序列:第—组四条指令把低位字节相加经调整后存入BCD3,其中ADD指令后(AL)=34+89=BDH,CF=0,AF=0;经DAA调整后,(AL)=23,CF=1,AF=1。第二组四条指令把高位字节相加经调整后存入BCD3十1。其中ADC指令后(AL)=8十27十CF=40,CF=0,AF=1;经DAA调整后(AL)=46,CF=0,AF=1;最后(DCD3)=4623结果正确。DAS减法的十进制调整指令执行操作:把AL中的差调整到压缩的BCD格式。这条指令之前必须执行SUB或SBB指令,减法指令必须把两个BCD码相减、并把结果存放在AL寄存器中。调整方法:如果AF标志为l,或者AL寄存器的低4位是十六进制的A—F,则使AL寄存器的内容减去06H.并将AF位置1。如果CF标志为1,或者AL寄存器的高4位是十六进制的A—F,则使AL寄存器的内容减去60H,并将CF位置l。DAS指令对OF标志无定义,但影响所有其它条件标志。例.SUBAL,AHDAS如指令执行前,(AL)=86,(AH)=078610000110-0700000111↓↓8610000110(-7)补11111001+01111111执行SUB指令后,(AL)=7FH,CF=0,AF=1执行DAS指令时。因AF=1,需做:(AL)=(AL)–06而得(AL)=79,CF=0,AF=1,结果正确。例.如(BCD1)=1234,(BCD2)=4612,试写出指令序列完成(BCD3)〈—(BCD1)-(BCD2)。指令序列如下:第一组:四条指令把低位字节相减经十进制调整后存入BCD3。其中SUB指令后(AL)=22,CF=0,AF=0,所以DAS并未做什么操作而把结果送往BCD3。第二组四条指令把高位字节相减经十进制调整后存入BCD3+1。其中SBB指今后,(AL)=CCH,CF=1,AF=1经DAS调整后(AL)=66,CF=1,AF=1;最后(BCD3)=6622,到这里,会说结果错了,其实,结果是对的、6622是一3378的十的补码。AAA加法的ASCII码调整指令:执行的操作:把AL中的和调整到非压缩的BCD格式,(AH)=(AH)十调整产生的进位值。本指令的调整方法:(1)如AL寄存器的低4位在0一9之间,且AF位为0,则跳过第(2)步,执行第(3)步;(2)如AL寄存器的低4位在十六进制数A—F之间或AF为1,则AL寄存器的内容加6,AH寄存器的内容加1,并将AF位置1。(3)清除AL寄存器的高4位:(4)AF位的值送CF位。AAA指令除影响AF和CF标志外,其余标志位均无定义。(2)非压缩的BCD码调整指令例.ADDAL,BLAAA如指令执行前,(AX)=0535H,(BL)=39H,可见AL和BL寄存器的内容分别为5和9的ASCII。35001101013900111001+01101110第一条指令执行完后,(AL)=6EH,AF=0;第二条指令进行ASC调整的结果使(AX)=0604H,AF=1,CF=1。AAS减法的ASCII码调整指令执行的操作:把AL中的差调整到非压缩的BCD格式(AH)〈—(AH)一调整产生的借位值本指令的调整方法:(1)如AL寄存器的低4位在0一9之间,且AF位为0,则跳过第(2)步,执行第(3)步。(2)如AL寄存器的低4位在十六进制数A—F之间或AF位为1,则把AL寄存器的内容减去6,AH寄存器的内容减1,并将AF位置1;(3)清除AL寄存器的高4位;(4)AF位的值送CP位。AAS指令除影响AF和CF标志外,其余标志位均无定义例.编写程序段实现下式(DX)〈—UPl十UP2一UP3其中参加运算的数均为二位十进制数。如要求计算25十48一19,每个十进制数以非压缩BCD格式存入存储器,每个数占有一个字,所以(UP1)=0205H.(UP2)=0408H,(UP3)=0109H。可写出指令序列如下图所示。AAM乘法的ASC调整指令执行的操作:把AL中的积调整到非压缩的BCD格式。这条指令之前必须执行MUL指令把两个非压缩的BCD码相乘(此时要求其高4位为0),结果放在AL寄存器中。本指令的调整方法:把AL寄存器的内容除以0AH,商放在AH寄存器中,余数保存在AL寄存器中。本指令根据AL寄存器的内容设置条件码SF、ZF和PF,注意:OF,CF和AF位无定义。例.MULAL,BLAAM如指令执行前,(AL)=07H,(BL)=09H执行MUL后,(AL)=3FH执行AAM后,(AH)=06H,(AL)=03HAAD除法的ASCII调整指令执行的操作:前面所述的加法、减法和乘法的ASC调整指令都是用加法、减法和乘法指令对两个非压缩的BCD码运算以后,再使用AAA、AAS、AAM指令来对运算结果进行十进制调整的。除法的情况却不同,它是针对以下情况而设立的。如果被除数是存放在AX寄存器中的二位非压缩BCD数。AH中存放十位数,AL中存放个位数,而且要求AH和AL中的高4位均为0。除数是一位非压缩的BCD数,同样要求高4位为0,在把这两个数用DIV指令相除以前,必须先用AAD指令把AX中的被除数调整成二进制数,并存放在AL寄存器中。本指令的调整方法是:AAD指令执行的操作是:(AL)〈—10*(AH)十(AL)(AH)〈—0例.编写程序段实现:C〈—B/A的商R〈—B/A的余数其中B字单元中存放着用非压缩BCD码表示的二位十进制数53,A字节单元中存放着用非压缩BCD码表示的一位数3。除法过程可表示如下:结果的商存放在字单元C中,余数存放在字节单元R中。编制的程序及说明如下:最后得到(C)=07H,(C十1)=01H,(C+3)=02H,即商为17,余数为2,结果正确。6.2.2输入/输出DOS功能调用DOS(DiskOperationSystem)和BIOS(BasicInputandOutputSystem)是为用户提供的两组系统服务程序。BIOS是IBMPC/XT的基本I/O系统,负责管理系统的测试程序、初始化引导程序、一部分中断矢量装入程序及外部设备的服务程序。由于这些程序固化在ROM中,用户可以直接调用。DOS是IBMPC/XT的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供调用的服务子程序,完成设备的管理和磁盘文件的管理。用户控制PC机硬件的方法:高级语言调用DOS程序使用BIOS程序直接访问硬件输入/输出DOS功能调用的方法1、子程序规定的入口参数送指定的寄存器。2、系统功能调用号送AH3、INT21Hl字符输出1、利用02H功能在CRT上显示一个字符。要求:(AH)=02H,(DL)=欲输出字符的ASCII码例:MOVDL,41H//入口参数MOVAH,02H//功能号INT21H2、利用09H功能在CRT上显示一个字符串要求:(AH)=09H,(DX)=欲输出字符串的首址,字符串以‘$’结束。例DATASEGMENTSTRINGDB‘HELLOEVERYBODY!$’DATAENDS……….CODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODstart:MOVDL,OFFSETSTRINGMOVAH,09HINT21H………..CODEENDSENDstartl字符输入1、利用0AH功能从键盘输一个字符入内存。要求:(AH)=0AH,(DX)=输入缓冲区首址注意:数据段中的输入缓冲区:第一个字节为所能保存的最大字符数第二个字节为实际接收的字符个数保留的单元第三个字节为所输入的第一个字符的ASCII例DATASEGMENTINBUFFERDB81,?,81DUP(?)………DATAENDS……….CODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODEstart:………..MOVDX,OFFSETINBUFFERMOVAH,0AHINT21HCODEENDSENDstart读字符给AL,不回显:MOVAH,07INT21H读字符给AL,不回显:MOVAH,08INT21H2、利用01H、07H,08H功能从键盘接受一个字符入内存。注意:这三个均无须入口参数读字符给AL,且回显:MOVAH,01INT21Hl程序中断利用4CH功能返回DOS。要求:(AH)=4CH或(AX)=4C00HCODESEGMENT…………MOVAH,4CHINT21HCODEENDS
本文标题:汇编-第6章 顺序程序设计
链接地址:https://www.777doc.com/doc-3585662 .html