系统编程 期末复习三 汇编

一、基础知识

  1. 存储单元为1Byte
  2. cpu寻址能力
    N根地址总线,寻址能力为pow(2,N) B
    N根数据总线,寻址能力为N/8 B
  3. 存储芯片
    RAM 随机存储器
    ROM 只读存储器(含主板、网卡、显卡的BIOS等)
  4. cpu组成
    运算器
    控制器
    寄存器

二、寄存器

  1. 寄存器分类:
    ax、bx、cx、dx 可分为两个8位独立使用
    si、di
    指针寄存器:sp、bp、ip
    段寄存器:cs、ss、ds、es
    标志寄存器:psw
  2. 一个字由两个字节构成
  3. 8086cpu用两个16位地址合成20位的物理地址,有20位地址总线,寻址能力1MB
    物理地址=段地址*16+偏移地址
    只有bx,si,di,bp可以在[]中用来寻址
    mov ax,[bx]
    mov ax,[bx+si]
    mov ax,[bx+di]
    mov ax,[bp]
    mov ax,[bp+si]
    mov ax,[bp+di]
  4. cs:ip指向当前执行命令地址
  5. jmp 段地址:偏移地址 或 jmp 某一合法寄存器(仅改变ip)
  6. 数据不能直接放入段寄存器
  7. ss:sp指向栈顶元素
  8. 一个栈段最大为64KB
  9. 入栈,栈顶向低地址移动;出栈,栈顶向高地址移动
  10. 高地址存高位,低地址存低位

三、第一个程序

格式:
assume 段寄存器:段名
段名 segment
代码段

mov ax,4c00H
int 21H
段名 ends
end

四、bx和loop指令

  1. []表示偏移地址,也代表一个内存单元
  2. ()表示一个寄存器或内存单元中的内容
  3. Idata表示常量
  4. loop执行流程
    (cx)=(cx)-1
    (cx)=0?
    不等于跳转回loop
    等于继续向下执行

五、转移指令的原理

  1. 段间转移同时修改cs和ip
    jmp far ptr 标号
    jmp dword ptr 内存单元地址
  2. 段内转移只修改ip
    jmp short 标号
    jmp near ptr 标号
    jmp word ptr 内存单元地址
  3. offset取得标号处的偏移地址
  4. nop空指令(对齐、延时)
  5. jcxz指令
    jcxz 标号
    if ((cx)==0) jmp short 标号
  6. loop指令
    loop 标号 (cx)–;if((cx)!=0) jmp short 标号

六、call和ret指令

  1. call指令
    call 标号 = push ip / jmp near ptr 标号
    call far ptr 标号 = push cs / push ip / jmp far ptr 标号
    call word ptr 内存单元地址 = push ip / jmp word ptr 标号
    call dword ptr 内存单元地址 = push cs / push ip / jmp dword ptr 标号
  2. ret指令
    ret = pop ip
    retf = pop ip / pop cs
  3. mul指令
    mul reg / mul 内存单元
    8位 结果放ax / 16位 结果放dx(高位)和sx(低位)

七、标志寄存器

  1. flag寄存器分类
    ZF 零标志位;PF 奇偶标志位;SF 符号标志位;
    CF 进位标志位;DF 方向标志位;OF 溢出标志位
  2. adc指令
    adc o1 o2 相当于 o1=o1+o2+CF
  3. sbb指令
    sbb o1 o2 相当于 o1=o1-o2-CF
  4. cmp指令
    cmp o1 o2
    比较o1-o2的结果 不保存结果
  5. 检验比较结果的条件转移指令
    e:equal ; a:above ; b:below
  6. 串传送指令
    rep movsb/movsw
    相当于
    s: movsb/movsw
    loop s
  7. cld指令将DF置0,正向
  8. std指令将DF置1,逆向
  9. pushf 将标志寄存器入栈
  10. popf 将标志寄存器出栈

八、内中断

  1. 内中断分类
    –除法错误 中断类型码:0
    –单步执行 中断类型码:1
    –执行into指令 中断类型码:4
    –执行int指令 中断类型码:n
  2. 中断处理过程
    接收中断信息–生成中断类型码–查找中断向量表–找到中断处理程序入口(设置段地址和偏移地址)
    –产生中断类型码
    –pushf
    –置IF=0 TF=0
    –push cs
    –push ip
    –ip=中断类型码4(4N)
    –cs=中断类型码
    4+2(4N+2)
  3. 编写中断处理程序的步骤
    –保存用到的寄存器
    –处理中断
    –恢复用到的寄存器
    –iret
  4. iret
    pop ip
    pop cs
    popf
  5. 单步中断
    如果psw中的TF=1,则执行单步中断
    –取得中断类型码1
    –pushf,设IF=0 TF=0
    –push cs, push ip
    –(ip)=(4),(cs)=(4+2)
  6. 设置ss和sp的指令要连续放置,避免中断

九、int指令

  1. int中断过程
    –取得中断类型码
    –pushf,设IF=0 TF=0
    –push cs, push ip
    –(ip)=(4n),(cs)=(4n+2)
  2. BIOS内容
    –硬件系统的检测和初始化程序
    –外部中断和内部中断的中断例程
    –用于对硬件设备进行的I/O操作的中断例程
    –其他和硬件系统相关的中断例程
  3. BIOS和DOS执行中断都用ah来传递内部子程序的编号
  4. int 10h是BIOS提供的
  5. int 21h是DOS提供的

十、端口

  1. CMOS RAM芯片
    –包含一个实时钟和128个存储单元的RAM存储器
    –用电池供电
    –70h为地址端口,71h为数据端口
  2. shl和shr指令
    –将一个寄存器或内存单元中的数据移位
    –将最后移出的一位写入CF中
    –最高位/最低位用0补充
  3. in读数据 out写数据
    只能用ax或al来存放从端口读入或发送到端口的数据

十一、外中断

  1. 根据外中断源分类
    可屏蔽中断 IF=1 CPU执行完当前指令后响应中断;IF=0 不响应
    不可屏蔽中断 中断类型码为2
    sti 设置IF=1
    cli 设置IF=0
  2. 不可屏蔽中断的中断例程
    –pushf
    –push cs ; push ip
    –(ip)=8 , (cs)=0A H
    几乎所有由外部设备引起的中断都是可屏蔽中断
  3. 键盘处理过程
    1)键盘输入
    ----按下一个键
    –开关接通
    –产生一个扫描码(通码,1Byte)
    –送入主板相关接口芯片的寄存器中(端口地址为60h)
    ----松开一个键 步骤同上 断码=通码+80H
    断码第7位为1 通码第7位为0
    一个键盘输入用一个字单元存放,高位字节存放扫描码,低位字节存放字符码
    2)引发9号中断
    –读出60H端口中的扫描码
    –字符键的扫描码:将其和其所对应的字符码送入BIOS 键盘缓冲区
    控制键的扫描码:将其转变为状态字节,写入内存中存储状态字节的单元
    –对键盘系统进行控制
    –编写int9中断
  4. 设置中断向量表新入口地址时,最好写成:
    cli 屏蔽中断
    设置入口地址
    sti 可以响应中断
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值