微机原理接口与技术学习笔记【更新中】
该内容学习笔记,记录学习过程。
cpu:ALU与控制器组成
ROM:只读存储器,RAM:读写存储器
红线为读信号,黄色为写信号
存储单元
数制与码制
数制之间的转换
数制运算
标志位psw逻辑与运算(都为1时为1)应用场合,清0
逻辑或运算,有有一个为1则为1,应用场合:将某些位置1.
逻辑异或运算:相同为0,不同为1,应用场合,将某些位取反,某些位不变。
有符号表达方式,补码运算,溢出判断
负数补码:整数补码取反加1或符号位保持不变,其余取反,末尾加1.
拓展:整数反码为原码
补码运算
bcd码及bcd码运算
后四位的值超过9,则加上0110B(6)
前四位超过9不超过16,进行加6修正原则,存储到最高位CF=1,一起读出
后四位存储到AF
如果为减法运算为减6修正
若加法后四位加后最高位有进位,或上述情况,都要进行加6修正
有符号用补码表示,十进制数用bcd码表示,符号用ascll码表示
通常的字符表示“09,AF",‘0’=30H,‘A’=41H,‘F’=46H,‘f’=66H
ASCLL码
数字转化字符加30H,逆转减30H,字母转化字符加37H,如41H-AH=37H,1不够减,借位16-10+1=7
转移指令及分支设计
高16位给cs,低16位给IP
cf表示有借位或进位,则转移
短转移为指令上128个存储单元,下127个
用法:前四个为无符号,后四个为有符号
mov AH,4CH
int 21H
这两个指令是终止程序,返回到系统
buf为存储数据个数,cx为计数器存储器,但也可以用其它存储器
加法指令:add 后不能同时为存储单元
word ptr a为转化为数据存储,避免同时为存储单元,a+2为高位加
减法指令
sf=1表示负数,目的操作数小于源操作数,若of=1表示溢出,则为正数,则DST>SRC
cf=0无借位
异或合并
zf=0,表示两式不等,再判断有无符号,相减发现有借位,cf=1,结果最高位sf=1,D7有借位,D6无借位,溢出,则of=1
inc与dec运算与add-1和sub-1的区别是除了cf外不变,其余位随结果变化
符号扩展:cwd扩展后dx保存高16位,ax保存低16位
cbw为字节扩展,cwd为字扩展
-1补码为1取反加1:1111 1111H=FFH
psw状态信号表示:
乘法指令:
保存注意
无符号:字节相乘,结果可以只用字节表示,则ax的ah=0,cf=0,of=0;若超出,ah不=0,cf=1,of=1
有符号判断
除法指令:除法运算对标志位无影响
符号扩展是对有符号数用的,其它的如0A0H,将bh=0就行
BCD码运算调整:DAA指令
逻辑运算类指令:
运算指令会影响psw,传送指令一般不会
位对位运算:cf表示最高为是否有进(借)位,没有,cf=0,af表示D3位对D4位是否有进位,没有为0,of为最高位和最高位是否一致,一致为0,不一致为1
sf,pf,zf,视运算结果而定
1.类型一致,2.必须是字形和字节型,3.至少一个有类型
段寄存器不能进行运算
逻辑测试指令:Test进行的与运算的结果不保存
zf=0表示结果不为0,zf=1表示结果为0
逻辑或指令:
逻辑异或指令:
一定要jmp l2,否则还是会执行l1程序
逻辑非指令:
neg表示求负数补码=not al 加inc al
移位运算:
移位运算特点:
指令语法格式:
cnt为移位次数
cl存储次数的范围为0~255
shr逻辑右移,最高位填0,移位存入cf,sar算术右移,最高位填与原最高位数字相同数字,移位存入cf
shl逻辑左移,sal算术左移相同,最低位填0
不带cf循环的移位,移位填入cf和它的最高位或最低位
带cf标志位的循环移位,将移位填入cf,原cf的数值填入最高位或最低位
左移一次做乘2运算,右移一次除2运算,n次就2^n
移位运算只对字和字节操作,如果对双字节,若左移,低16位做不带cf循环左移,高16位做带cf循环左移,最后将低16位保存到ax,高16位保存到dx
例题讲解:进行高4位清0,先取出6,再进行add运算,再移位,将高4位存储到低4位al , 注意:执行完低位转换后,al已经变了,所以再进行清0前将al存储的数值压入堆栈ax保存下,不能为al保存,在高4位转化前用pop ax,使值恢复原状。
例题讲解:先看D0位,若为1则为奇数,为0为偶数,在进行除2(右移一位)后D0为存入cf,偶数+0,奇数+1,则都为加现在的cf,用adc命令进行标志位加法,shr逻辑右移位是对无符号,sar算术右移位对有符号,第二种方法为将结果加0.5取整,化简后为数值加1取整除2运算
标志位操作指令
RCR是对cf标志位的操作指令
IF为外部可屏蔽终端位,IF=0表cpu关中断,IF=1表cpu开中断。IF的SIT指令一般放于片段首部,开中断
MOVSB/W字符传送指令 字节/字
CMPSB/W字符比较指令 字节/字
SCASB/W字符扫描指令 字节/字
LODSB/W字符装入指令 字节/字
STOSB/W字符存储指令 字节/字
源操作数在存储器单元,单元地址:DS:SI(逻辑地址)
目的操作数在存储器单元,地址:ES:DI
如果两个在寄存器中,地址在al/ax中
寻址方式约定
DF表方向控制标志位,每执行一次指令,都会使DI和SI更新,更新由DF决定
重置指令:放于字符操作指令前,控制循环包括次数
10、字符传送指令:
movs dst,src;若dst,src为字节操作等同于movsb,若为字操作等同于movsw。movs只是为了指定操作类型是字还是字节(一般不使用)
MOV ES AX将段地址传送到ES,因为它不能直接到es;movs一般与rep配合使用
10、字符比较指令
REPZ CMPSB该指令图
SCASB:源操作数固定取al,目的操作数在存储单元,由ES:DI给出
al-ES:DI后,更新DI,DI=1
10、字符扫描指令
LEA DI BUF让DI指向第一个单元
MOV AX SEG BUF将段地址传送到ax中
MOV ES AX将段地址传送到ES,因为它不能直接到es
CLD(指针更新方向)
10、字符装载指令
若要使用,则与rep配合使用
10、字符存储指令
对psw无影响
10、总结
源操作数在存储单元由DS:SI给出,在寄存器中由AL/AX给出;目的操作数如果在存储单元由ES:DI给出,若在寄存器中由AL/AX给出,4;SI/DI自动更新,由DF决定方向
配合使用表
14、中断调用与返回指令及中断服务
除数复习:商存到al,余数存到ah
of=1溢出中断
通过intr引脚提出请求:if=0关中断
中断服务子程序与普通的区别
256*4=1024个字节(物理地址)
中断类型号0~n