微机原理试后总结

前言

写在前面,学习汇编有15周了,今天终于考完试,结束了调试、上机、debug、复习、查资料的ku bi日子,但是现在确实比较怀念的,这过程中真的踏了不少坑,遇到不懂的就得自己查论坛、查博客,直到搞懂为止,非常感谢有些博客整理的很仔细,我也才明白了写博客的重要性,利人的同时更利己,所以我想把自己这些天琢磨的汇编中的难于理解的或较为重要的知识(keng)总结一下,不正确的地方还请指正。
也没有什么顺序,就是自己感觉领悟的还可以的指令、程序等的总结。

溢出和进位

溢出

关于溢出和进位的理解还是比较难的,具体就是对状态标志位OF和CF的影响。
先来说一个概念,溢出是针对有符号数而言的,进位对于无符号数才有意义,很多文章都对这一点没有清晰的概念。
那什么情况下算溢出呢?
我们把二进制的8位分别称作D7,D6,D5``````D0,则只有在D6向D7进位D7向前一位进位两种情况有且仅有一种发生时,才会发生溢出,也可以说当情况1和情况2的异或等于1时才会溢出。
下面来举个例子:
3+5=8 无溢出
1
因为没有次低位和最高位的进位,故无溢出。
125+5=130 有溢出
2
有D6 向D7的进位,而没有D7的进位,故有溢出。
-64+65=1 无溢出
3
D6和D7均有进位,则异或为0,同样没有溢出。
当然还有一种情况是有D7的进位而没有D6进位的,也属于溢出。

进位

而进位是指:比如两个无符号8位数进行运算时其结果为9位二进制数(有一位是进位位CF),两个8位的二进制数相加不可能超过9位的,因而不存在溢出,只有进位。
而当判断两个有符号数相减时的溢出情况时,只需判断次高位和最高位是否有借位即可
例如:
在这里插入图片描述
只有最高位有借位,所以溢出。

有关中断

涉及到了中断、中断向量、中断向量表的知识,下面来借用一张PPT说明
5
上图就非常清楚的把三者之间的关系说明白了,1号中断向量的地址就是00004H~00007H,在这个地址内存放的就是中断向量CS:IP(4000H:3006H),根据这个中断向量,CPU就能找到所要执行的中断服务子程序的入口地址在哪儿了。

有关8255A编程

这里就不再对课本上长谈的控制字等解释了,通过一些编程的题目就能对其基本的原理掌握,
1.如下所示,现将8255A的B口作为传送字符的通道,工作于方式0,输出方式,A端口未用,端口C也工作于方式0,PC0作为BUSY信号的输入端,PC7作为STB信号的输出端,负脉冲时外设才能接受一个数据,设8255A的端口地址为C0H—C6H,试对8255A进行初始化编程,并写出通过查询方式把CL中的内容向打印机传送一次数据的程序段。
6

    MOV     AL,      81H                          
    OUT     0C6H,    AL                            
    MOV     AL,      00001111B         
    OUT     0C6H,    AL                            
LPST: 
    IN      AL,      0C4H  ;查询BUSY口             
    TEST    AL,      01H  ;                         
    JNZ     LPST                                   
    MOV     AL,      CL    ;数据输出B口             
    OUT     0C2H,    AL          
    MOV     AL,      00001110B ;启动脉冲,PC7置为负脉冲使STB端口有效       
    OUT     0C6H,    AL                             
    INC     AL                                       
    OUT     0C6H,    AL            

2.CPU通过8255A的B口(采用简单I/O工作方式)向打印机传送100个字符,这些字符在内存中的起始地址为0100:1000H,共100个字节。8255A的端口地址为400~403H,连接示意图如图所示。
7

    mov  dx,  403H                (1分)
    mov  al,  10000001b(或者81h)   (1分)
    out  dx,  al      ;初始化8255A的方式选择控制字,设定工作模式
    mov  al,  00001101b(或者0DH)   (1分)
    out  dx,  al  ;向STB引脚发送高电平
    mov  ax,  0100H               (0.5分)
    mov  ds,  ax
    mov  si,  1000H               (0.5分)
    mov  cx,  100               
lp:  mov  dx,   402H                 (1分)
    in   al,  dx  ;读取PC3的状态
    and  al,  08H                (1分)
    jnz  lp     ;如果PC3为高电平,表示打印机还未处理完毕,需等待
    mov  dx,  401H               (1分)
    mov  al,  [si]
    out  dx,  al    ;将要打印的字符内容通过B口输出至打印机
    mov  dx,  403H               (1分)
    mov  al,  00001100b(或者0CH)  (1分)
    out  dx,  al           
    nop
    nop
    mov  al,  00001101b(或者0DH)   (1分)
    out  dx,  al  ;在PC6上发出一个负脉冲后,然后回到高电平状态
    inc  si
    dec  cx
    jnz  lp

最后

文章部分参考了zqm201及神思love两位博主的文章,详细可参看
神思love
zqm201
这三方面是最初开始学理解自己理解错误的知识点,可能我只是把当初困扰自己的坑说了出来,供大家参看吧(感觉总结的一般呜呜呜)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值