我是靠谱客的博主 重要大叔,最近开发中收集的这篇文章主要介绍逻辑&算术运算逻辑&算术运算,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

逻辑&算术运算

1、mul运算指令

Assembly语言中,乘法运算为方便存储值,值的高位和低位一般区分在不同寄存器中

乘法预存放:

相乘的数位数一致(8bits/16bits)

八位时,数一存放在AL中,另一个对接,放在内存单元或寄存器中;

十六位时,数二存放在AX中,另一个放在16位寄存器或内存单元

数据结果:

乘法运算若是八位数据相乘,结果默认放在AX中;若是十六位数据,其结果高位默认放在DX中,而地位默认在AX中

mov ax , 100 mov bx , 1000 mul bx ---->ax = 4240H dx = 000FH

2、adc指令

借助于标志寄存器CF(carry flag)进位,进行带进位加法运算

①低位相加

②高位相加并上低位产生的进位值

adc ax , bx ; ( ax ) = ( ax ) + ( bx ) + CF

3、sbb指令

借助于标志寄存器CF(carry flag)进位,进行带借位减法运算

sbb ax , bx ; ( ax ) - ( bx ) - CF

对于多位减法计算:

003E1000H - 00202000H

mov bx 003EH mov ax 1000H sub ax , 2000H sbb bx , 0020H

4、cmp指令

减法比较操作,对数相减,不保存结果,通过改变ZF、CF、SF等寄存器位值记录cmp结果

cmp ax , ax zf = 1,pf = 1,sf = 0,cf = 0, of = 0

cmp对单一寄存器的改写并不能得出正确结果,需联合标志寄存器多位后再做判断

OF和SF cmp指令判定:(cmp ah , bh)

①sf = 1,of = 0---->ah<bh②sf = 1,of = 1---->ah>bh

③sf = 0,of = 0---->ah<bh④sf = 0,of = 1---->ah>=bh

溢出导致的实际结果与逻辑上真正的结果正负相反

5、cbw和cwd指令

字节扩展到字 CBW;将寄存器AL中的符号位,扩展到寄存器AH

字扩展到双字 CWD; 将寄存器AX中的符号位,扩展到寄存器DX

汇编中运算全程是补码运算

为便于有符号位计算,汇编执行操作:

mov al,04H
cbw         ;ah = 00H ,ax = 0004h
mov al,82H
cbw         ;ah = FFH ,ax = FF82H
mov ax,0055H
cwd         ;dx = 0000H
mov ax,8055H
cwd         ;dx = FFFFH

6、div指令

div除法指令

①除法操作中除数有8位和16位两种

②被除数存放:若除数为8位,被处死则为16位,默认存放在AX中;若除数为16位,则在DX和AX存放,DX存放高位

③结果存放:除数为8位,AL存放商,AH存放余数,若除数为16位,AX存放除法操作的商,DX存放余数

mov ax,3455h
div byte ptr [bx+si+8]
(al) = (ax)/((ds)*16+(bx)+(si)+8)的商
(aH) = (ax)/((ds)*16+(bx)+(si)+8)的余数
mov word ptr [bx+si+8]
(ax) = [(dx)*1000H+(ax)]/((ds*16)+(bx)+(si)+8)的商
(dx) = [(dx)*1000H+(ax)]/((ds*16)+(bx)+(si)+8)的余数

注意:发生除法溢出,cpu会执行int 0 除法溢出中断

最后

以上就是重要大叔为你收集整理的逻辑&算术运算逻辑&算术运算的全部内容,希望文章能够帮你解决逻辑&算术运算逻辑&算术运算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部