汇编语言程序设计相伟.pptxVIP

  • 0
  • 0
  • 约4.51千字
  • 约 52页
  • 2019-11-28 发布于上海
  • 举报
第4章 分支程序设计;4.1 转移地址的寻址方式;4.1.1 段内寻址;1.段内直接寻址;例4-1:分析下列指令。;2.段内间接寻址;例4-2:假设(DS)=2000H,(BX)=3000H,(23000H)=2536H,分析下列指令。; 4.1.2 段间寻址;1.段间直接寻址;例4-3:执行如下指令;2.段间间接寻址;例4-4:执行如下指令;4.2 无条件转移指令;4.2.1 段内无条件转移;2.段内间接转移;4.2.2 段间无条件转移;2.段间间接转移;4.3 条件转移指令;4.3.1 简单条件转移指令;例4-5:假设AX中为一带符号数,求AX中数的绝对值。;例4-6:计算X+Y,X和Y单元分别存放着一个16位有符号数。若结果有溢出,则转移到OVERFLOW处理。;例4-7:统计寄存器BX中1的个数。;4.3.2 无符号数条件转移指令;无符号数条件转移指令;例4-8:阅读下面程序段,若寄存器AL的值分别取20H、5、0FFH和2,分析程序段的执行情况。;例4-9:分析以下程序段:;4.3.3 带符号数条件转移指令;带符号数条件转移指令;例4-10:假设有两个双精度数a和b,分别存储在AX、BX和CX、DX中,分析下列程序段的功能。;例4-11:将例4-9程序段中的JNA指令改成JNG指令,分析程序段功能。;分析:;4.4 分支程序设计方法;4.4.1 二分支程序设计;例4-12:分析下列程序段的结构。;要设计双分支程序结构,首先要产生条件,然后对产生的条件进行分析判断,根据判断结果决定执行哪一个分支,最后转入相应程序段的起始地址去执行分支程序。其中产生条件的指令通常由指令系统中影响状态标志位的指令来产生,如算术运算指令(如ADD、SUB、CMP)、逻辑运算指令(如AND、TEST)、移位指令(如SHR、SHL)等等。要想用好这些指令,就要搞清楚这些指令的功能及其对标志位的影响。特别是要熟练掌握状态标志位CF、ZF、PF、SF和OF的含义。 下面我们通过例子来介绍二分支程序设计方法。 ;例4-13:从键盘输入0 ~ 9中任一自然数x,求其立方值。若输入的字符不是0 ~ 9中的某数字,则显示“INPUT ERROR!”,表明输入错误。;图4-8 求立方值程序流程图;源程序如下:; CMP AL , ‘0’ ;若输入字符不是0~9中的某一数字,转LERR JB LERR CMP AL , ‘9’ JA LERR AND AL , 0FH MOV X , AL ;X←x的真值 ADD AL ,AL MOV BL ,AL ;BX←2﹡x MOV BH ,0 MOV AX ,TAB[BX] MOV Y , AX ;Y←x的立方值 EXIT: MOV AH ,4CH INT 21H ;结束程序,返回DOS状态 LERR: MOV DX ,OFFSET INERR MOV AH ,9 ;显示错误提示信息 INT 21H JMP EXIT CODE ENDS END BEGIN 程序运行时,屏幕首先显示“PLEASE INPUT X (0..9):”,若键入 2,则2*x = 4,4→BX,从字单元TAB+4中取出2的立方值8送入Y中。若键入字符‘a’,因其不是‘0’~‘9’中的某一数字符,故显示“INPUT ERROR !”。;例4-14:将a、b、c三个十六位无符号数分别与零比较,如果三个数均不为零,求出三个数之和存放在变量d中(假设总和小于65535),若其中至少有一个数为零,则显示“ERROR!”。;源程序如下:; CMP C , 0 JZ NEXT ;c=0,转NEXT ADD AX , A ADD AX , B ADD AX , C MOV D , AX ;三数求和,结果存入D中 JMP EXIT NEXT: MOV DX , OFFSET INERR MO

文档评论(0)

1亿VIP精品文档

相关文档