微机原理设计第6章(3)章节_第1页
微机原理设计第6章(3)章节_第2页
微机原理设计第6章(3)章节_第3页
微机原理设计第6章(3)章节_第4页
微机原理设计第6章(3)章节_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章汇编语言程序设计

本章内容提示

讲述汇编语言程序设计的基本步骤、基本结构及各种结构程序的设计方法

6.1

汇编语言程序设计基本方法和基本步骤

6.2

算术运算类指令6.3

逻辑运算与移位类指令6.4顺序程序的结构形式和程序设计6.1汇编语言程序设计基本方法和基本步骤6.1.1

汇编语言程序设计基本步骤

6.1.2

结构化程序的概念

6.1.3

流程图画法规定

返回本章首页6.1.1汇编语言程序设计的一般步骤1.分析问题2.确定算法或解题思想

3.绘制流程图和结构图

4.分配存储空间和工作单元

5.编制程序

6.程序静态检查

7.上机调试

返回本节6.1.2结构化程序的概念程序的设计、编写和测试采用规定的组织形式,使程序结构清晰,易读,易调试和修改基本结构:顺序、分支(选择)和循环每一个结构只有一个入口和一个出口3种结构任意组合和嵌套就构成结构化程序1)顺序结构按照语句的先后次序执行一系列操作2)选择结构(条件选择结构)根据条件判断选择执行不同的程序段双分支结构和多分支结构3)循环结构重复执行操作,直到条件出现为止循环的继续由条件判断决定,选择结构的扩展6.1.3流程图画法规定

1.流程图

由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。2.流程图符号表示(1)起止框(2)判断框

(3)处理框

(4)调用框

(5)指向线

(6)连接框

6.2算术运算类指令6.2.1加法类指令6.2.2减运算指令6.2.3乘运算指令6.2.4除运算指令6.2.5BCD码调整指令6.2.1加法指令1、不带进位加法指令ADD2、带进位加指令ADC3、加1指令INC1、不带进位加指令ADD语句格式:ADDDST,SRC(DST)+(SRC)→DST。2、带进位加法指令ADC

格式:ADCDST,SRC(DST)+(SRC)+CF→DST。【例】无符号双字加法运算。MOV AX,4652H ;(AX)=4652HADD AX,0F0F0H ;(AX)=3742H,CF=1MOV DX,0234H ;(DX)=0234HADC DX,0F0F0H ;(DX)=0F325H,CF=03、加1指令INC语句格式:INCDST(DST)+1→DST。单操作数——寄存器或存储器单元可用于对计数器和地址指针进行调整。如:INCBX;即(BX)+1→BX。6.2.2减运算指令1、不带借位减法指令SUB2、带借位减指令SBB3、减1指令DEC4、求补指令NEG5、比较指令CMP1、不带借位减法指令SUB

格式:SUBDST,SRC(DST)-(SRC)→DST【例】减法运算。MOV AX,5678H ;(AX)=5678HSUB AX,1234H ;(AX)=4444HMOV BX,3354H ;(BX)=3354HSUB BX,3340H ;(BX)=0014H2、带借位减指令SBB

格式:SBBDST,SRC(DST)―(SRC)―CF→DST主要用于多精度数据运算3、减1指令DEC

格式:DECDST

(DST)-1→DST。单操作数——寄存器或存储器单元一般用于对计数器和地址指针的调整。

如:DECCX

DEC[SI]4、求补指令NEG

格式:NEGDST将DST的逐位求反后加1,结果仍在DST中。即0-(DST)→DST。【例】求补运算。MOV AX,0FF64HNEG AL ;(AL)=9CHNEG AX ;(AX)=009CH5、比较指令CMP

格式:CMPOPD,OPS目的操作数减源操作数,根据结果设置标志位。【例】比较AL的内容与50的大小。CMP AL,50 ;(AL)-50JB BELOW ;(AL)<50,转到BELOW处执行SUB AL,50 ;(AL)>=50,(AL)-50→ALINC AH ;(AH)+1→AHBELOW: …6.2.3乘法运算指令1、无符号数乘法指令MUL2、有符号乘指令IMUL1、无符号数乘法指令MUL

格式:MULSRC字节乘法:(AL)*(SRC)→AX字乘法:(AX)*(SRC)→DX,AX【例】无符号数0A3H与11H相乘。MOV AL,0A3H ;(AL)=0A3HMOV BL,11H ;(BL)=11HMUL BL;(AX)=0AD3H2、有符号乘指令IMUL

格式:IMULSRC字节乘法:(AL)*(SRC)→AX字乘法:(AX)*(SRC)→DX、AX。除计算对象是带符号数外,其他约定同MUL,但计算结果不同。【例】有符号数0B4H与11H相乘。MOV AL,0B4H ;(AL)=B4HMOV BL,11H ;(BL)=11HIMUL BL ;(AX)=0FAF4H6.2.4除运算指令1、无符号除指令DIV2、有符号除指令IDIV3、符号扩展指令1、无符号除指令DIV语句格式:DIVSRC字节除:(AX)/(SRC)→AL(商)、AH(余数)字除:(DX、AX)/(SRC)→AX(商)、DX(余数)【例】无符号数0400H/0B4H的程序段。MOVAX,0400H ;(AX)=0400HMOVBL,0B4H ;(BL)=0B4HDIVBL;商(AL)=05H,余数(AH)=7CH2、有符号除指令IDIV

格式:IDIVSRC字节除:(AX)/(SRC)→AL(商)、AH(余数)字除:(DX,AX)/(SRC)→AX(商)、DX(余数)DIV和IDIV对标志的影响未定义,但可产生溢出。【例】实现有符号数0400H/0B4H运算的程序段。MOVAX,0400H ;(AX)=0400HMOV BX,0B4H ;(BX)=0B4HIDIVBX ;(AL)=0F3H,(AH)=24H3、符号扩展指令1)字节转换成字指令CBW2)将字转换成双字指令CWD1)字节转换成字指令CBW语句格式:CBW将AL中的数据符号位扩展至AH。【例】将字节数据扩展成字数据。MOV AL,0A5H ;(AL)=0A5HCBW ;(AX)=0FFA5HADD AL,70H ;(AL)=25HCBW ;(AX)=0025H2)将字转换成双字指令CWD

格式:CWD将AX中的数据符号位扩展至DX。【例】将AX中的字数据扩展成双字数据。MOV DX,0 ;(DX)=0MOV AX,0FFABH ;(AX)=0FFABHCWD ;(DX)=0FFFFH(AX)=0FFABH6.2.5BCD码调整指令1、加法的十进制调整指令DAA2、减法的十进制调整指令DAS3、加法的非压缩BCD码调整指令AAA4、减法的非压缩BCD码调整指令AAS1、加法的十进制调整指令DAA格式:DAA若(AL)低4位大于9或AF=1,(AL)=(AL)+6且AF=1;若(AL)>=0A0H或CF=1,(AL)=(AL)+60H且CF=1。SF、ZF、PF均有影响。【例】压缩BCD码的加法运算。MOVAL,68H ;(AL)=68H,压缩BCD码68MOVBL,28H ;(BL)=28H,压缩BCD码28ADDAL,BL;二进制加法(AL)=68H+28H=90HDAA ;十进制调整:(AL)=96H2、减法的十进制调整指令DAS

格式:DASAF=1或(AL)低4位大于9,(AL)=(AL)-6且AF=1(AL)>=0A0H或CF=1,则(AL)=(AL)-60H且CF=1。SF、ZF、PF均受影响。【例】压缩BCD码的减法运算。MOV AL,68H;(AL)=68H,表示压缩BCD码68MOV BL,28H;(BL)=28H,表示压缩BCD码28SUB AL,BL ;(AL)=68H-28H=40HDAS ;十进制调整:(AL)=40H

;实现压缩BCD码减法:68-28=403、加法的非压缩BCD码调整指令AAA格式:AAA如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)+6(AH)=(AH)+1(AF)=(CF)=1

且AL高4位清零。否则:(CF)=(AF)=0AL高4位清零。4、减法的非压缩BCD码调整指令AAS语句格式:AAS如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)-6(AH)=(AH)-1(AF)=(CF)=1AL高4位清零。否则:(CF)=(AF)=0

AL高4位清零。其他标志位OF、PF、SF、ZF不确定。6.3逻辑运算与移位指令6.3.1逻辑运算指令6.3.2移位指令6.3.3循环移位指令6.3.1逻辑运算指令逻辑非指令NOT逻辑乘指令AND测试指令TEST逻辑或指令OR逻辑异或指令XOR(1)逻辑非指令NOT格式:NOTDST将目的操作数逐位取反后保存在原位置。【例】逻辑非运算。MOV AX,878AH ;(AX)=878AHNOT AX ;(AX)=7875H(2)逻辑与指令AND格式:ANDDST,SRC

将两操作数进行与运算,结果存目的地址。用于目的操作数某些位清0。逻辑乘的运算法则为:1∧1=1,1∧0=0,0∧1=0,0∧0=0【例】将AL中第3位和第7位清零。

MOV AL,0FFHAND AL,77H

(3)测试指令TEST格式:TESTDST,SRC两操作数按位逻辑与运算,按结果设标志位。【例】测试AX中的第12位,不为0转NZERO。

TESTAX,1000HJNENZERO

(4)逻辑或指令OR格式:ORDST,SRC两操作数进行逻辑或运算,结果存目的地址。逻辑或的运算法则为:1∨1=1,1∨0=1,0∨1=1,0∨0=0。【例】将AL寄存器中第3位和第7位置1。

MOV AL,0OR AL,88H

(5)逻辑异或指令XOR格式:XORDST,SRC两操作数按位异或运算,结果送入目的地址。说明:按位加的运算法则为;1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0。【例】按位加运算。MOV AL,45H ;(AL)=45HXOR AL,31H ;(AL)=74H6.3.2移位指令包括算术移位指令、逻辑移位指令和循环移位指令。

[标号:]操作符OPD,1

[标号:]操作符OPD,CL目的操作数所有位移动1位或按寄存器CL指定的次数(0~255),结果送入目的地址。目的操作数寄存器数据或存储器数据。(1)算术左移SAL和逻辑左移指令SHL

格式:SALDST,1

或SHLDST,1

SALDST,CL

或SHLDST,CL(DST)向左移动指定的次数,最高位进CF,最低位补0。(2)算术右移指令SAR格式:SARDST,1或SARDST,CL将(DST)向右移动指定的次数且最高位保持不变;移出的最低位进CF。SAR可实现对有符号数除n个2的运算(n为移位次数)。【例】算术右移运算。

MOV BH,0F4H ;(BH)=0F4HMOV CL,2 ;(CL)=2SAR BH,CL;(BH)=0FDH,CF=0(3)逻辑右移指令SHR格式:SHRDST,1

或SHRDST,CL将(DST)向右移动CL规定的次数,最高位补入相应个数的0,移出的最低位进CF

。6.3.3循环移位指令1、循环左移指令ROL格式:ROLDST,1或

ROLDST,CL将目的操作数首位相连,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。(2)循环右移指令ROR格式:RORDST,1或

RORDST,CL将目的操作数首尾相连,将环中的所有位一起右移规定的次数。CF中为最后移入位的值。(3)带进位的循环左移指令RCL格式:RCLDST,1或RCLDST,CL将目的操作数连同CF标志一起向左循环移动规定的次数。

(4)带进位的循环右移指令RCR格式:RCRDST,1或RCRDST,CL将目的操作数连同CF标志一起向右循环移动规定的次数。6.4顺序程序设计例1:试编写一程序计算以下表达式的值。

w=(v-(x*y+z-540))/x

式中x、y、z、v均为有符号字数据。设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W中。顺序运算程序流程图w=(v-(x*y+z-540))/xDATASEGMENTX DW 200YDW 100Z DW 3000V DW 10000W DW2DUP(?)DATA ENDSSTACKSEGMENTSTACK DB200DUP(0)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODE,SS:STACK题目w=(v-(x*y+z-540))/xSTART:MOVAX,DATA MOVDS,AX MOVAX,X IMULY;(X)*(Y)→DX:AX MOVCX,AX MOVBX,DX;(DX:AX)→BX:CX MOVAX,Z CWD ;(Z)符号扩展w=(v-(x*y+z-540))/xADDCX,AX ADCBX,DX;(BX:CX)+(DX:AX)→BX:CX SUBCX,540 SBBBX,0;(BX:CX)-540→BX:CX

MOVAX,VCWD ;(V)符号扩展

SUBAX,CX SBBDX,BX;(DX:AX)-(BX:CX)→DX:AX w=(v-(x*y+z-540))/x

IDIVX ;(DX:AX)/X

MOVW,AX;商→W MOVW+2,DX;余数DX→W+2 MOVAH,4CH;返回DOS状态

INT 21HCODE ENDS

END STARTw=(v-(x*y+z-540))/x

例2:已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论