汇编语言(五):算术运算指令、BIOS中断服务

您所在的位置:网站首页 求补指令neg全称 汇编语言(五):算术运算指令、BIOS中断服务

汇编语言(五):算术运算指令、BIOS中断服务

2024-07-10 03:45| 来源: 网络整理| 查看: 265

作为汇编语言的课程笔记,方便之后的复习与查阅

本篇为课程第六次课内容

目录 算术运算指令加法指令ADD带进位加法指令ADC增量指令INC(increment)减法指令SUB(subtract)带借位减法指令SBB减量指令DEC(decrement)求补指令NEG(negative)比较指令CMP(compare)符号扩展指令乘法指令除法指令 BIOS中断服务DOS系统调用BIOS中断:字符属性BIOS中断:设定显示模式BIOS中断:置光标位置BIOS中断:在光标位置显示字符BIOS中断:显示字符串

算术运算指令

请注意算术运算类指令对标志的影响

掌握:ADD/ADC/INC、SUB/SBB/DEC/ NEG/CMP熟悉:MUL/IMUL、DIV/IDIV理解:CBW/CWD 加法指令ADD

add指令将源与目的操作数相加,结果送到目的操作数。源操作数为立即数时,源操作数带扩展为和目的操作数相同长度类型

ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem ADD mem,imm/reg ;mem←mem+imm/reg

注意:

源操作数和目标操作数类型匹配目标不能是立即数和CS段寄存器两个操作数不能同时为存储器操作数对于ADD mem,imm的形式,要指明mem的长度类型(如:BYTE PTR [100H])

示例:

ADD AL, 2050H ; 错误,AL寄存器为8位,而立即数为16位 ADD AX, 50H ; 正确 ADD AX, BL ; 错误,前后两个寄存器位数不同 ADD 2050, AX ; 错误,目标操作数不能为立即数 ADD CS, 2050H ; 错误,目标操作数不能为立即数CS段寄存器 ADD [200H], 05H ; 错误,未指定内存单元的长度类型 ADD BYTE PTR [200H], BYTE PTR [100H] ; 错误,不允许源操作数和目的操作数都为mem

ADD指令按状态标志的定义相应设置: CF OF SF ZF AF PF ---- 重点理解对CF与OF的影响

在这里插入图片描述 在这里插入图片描述 注意:上面的数都是用补码表示的

带进位加法指令ADC

ADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数

ADC指令主要与ADD配合,实现多精度加法运算

ADC reg,imm/reg/mem ;reg←reg+imm/reg/mem+CF ADC mem,imm/reg ;mem←mem+imm/reg+CF

在这里插入图片描述 用汇编处理时最多只能处理16位的,在处理高16位加法的时候使用adc

增量指令INC(increment)

INC指令对操作数加1(增量),主要用于对计数器和地址指针的调整

INC指令不影响进位CF标志,按定义设置其他状态标志

INC reg/mem ;reg/mem←reg/mem+1 inc bx inc byte ptr [bx] 减法指令SUB(subtract)

SUB指令将目的操作数减去源操作数,结果送到目的操作数

SUB reg,imm/reg/mem ;reg←reg-imm/reg/mem SUB mem,imm/reg ;mem←mem-imm/reg

注意:

源操作数和目标操作数类型匹配目标不能是立即数和CS段寄存器两个操作数不能同时为mem对于SUB mem, imm的形式,要指明mem的长度类型

SUB指令按状态标志的定义相应设置: CF OF SF ZF AF PF ---- 重点理解对CF与OF的影响

在这里插入图片描述 在这里插入图片描述

带借位减法指令SBB

SBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数

SBB指令主要与SUB配合,实现多精度减法运算

SBB reg,imm/reg/mem ;reg←reg-imm/reg/mem-CF SBB mem,imm/reg ;mem←mem-imm/reg-CF

在这里插入图片描述

减量指令DEC(decrement)

DEC指令对操作数减1(减量),主要用于对计数器和地址指针的调整

DEC指令不影响进位CF标志,按定义设置其他状态标志

DEC reg/mem ;reg/mem←reg/mem-1 dec bx dec byte ptr [bx] 求补指令NEG(negative)

NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数。求补运算也可以表达成:将操作数按位取反后加1

NEG指令对标志的影响与用零作减法的SUB指令一样

NEG reg/mem ;reg/mem←0-reg/mem 例如:求0110 0100的补码就相当于计算1 0000 0000 - 0110 0100 mov ax,0ff64h neg al ;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1、AF=1 sub al,9dh ;ax=ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1、AF=1 neg ax ;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1、AF=1 dec al ;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1、AF=0 neg ax ;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=0、AF=0 比较指令CMP(compare)

CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志

CMP指令执行的功能与SUB指令相同,但结果不回送目的操作数

CMP reg,imm/reg/mem ;reg-imm/reg/mem CMP mem,imm/reg ;mem-imm/reg

执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等

cmp al,100 ;al-100 jb below ;al


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3