西电微机原理-第三章 Intel处理器指令系统及汇编语言(4)

八、字符串和数组

Untitled

基本字符串操作指令

Untitled

  • “串”指的是“数组”
  • 指令一般带 “S”
  • 指令中的“B” “ W” “D” 分别表示 字节 字 双字

Untitled

  • 数据传递方向 DS:SI -> ES:DI
  • 增减方向:标志位DF 【用 CLDSTD 设置】
  • 重复前缀: REP ;循环次数: CX

二维数组

Untitled

实模式 基址+变址寻址中,基址和变址寄存器是受限的

基址 BX BP
变址 SI DI

一般不用BP【访问堆栈】,所以只有两种组合 (bx,si) || (bx, di)

Untitled

Untitled

Untitled

寻址方式总结

寻址方式总结

九、宏

定义

Untitled

Untitled

Untitled

LOCAL 确保跳转时不会出现混乱

宏 和 子程序调用的区别

共同点:都是一种程序简化的方式

  1. 占用的内存空间更大:拷贝到源程序中,代码会有多份;子程序只会有一份
  2. 参数传递方式比较单一:宏调用是的参数有汇编通过实参替换形参的方式进行;子程序的参数可以通过寄存器,堆栈或者约定的内存单元传递。
  3. 处理更快:宏调用是在汇编时完成,运行无需额外的开销;子程序调用和返回均需要时间,而且涉及堆栈,速度慢。

十、使用I/O端口控制硬件

基本原理:读写接口地址

Untitled

  • 内存映射方式:显存
  • 端口:一般外设
冯诺依曼结构 哈佛结构
指令和数据统一存储 指令和数据分别存储
SISC RISC
内存和I/O分别读写【有IN/OUT指令】 内存和I/O统一读写【统一用LOAD】

x_86:冯诺依曼+SISC

RISC-V:哈佛+RISC

Untitled

x86地址线有20条,内存的寻址范围是1MB,但是访问接口的时候,地址线只用低16条,接口地址空间大小是64KB

Untitled

  • 累加器就是指 A寄存器 : AL AX EAX ,A寄存器的大小决定输出数据的大小
  • 如果端口地址是16位的,由于地址线是16条,所以可以“直接寻址”
  • 如果端口地址是大于16位的,需要先将地址存入 dx 寄存器,再用“寄存器间接寻址”【必须用dx】

Untitled

例子:实时钟RTC

寄存器与芯片引脚

Untitled

Untitled

实时钟芯片内部虽然有64个寄存器,但不可能都直接向外引出接口。

而是内部进行编号,只向外引出两个接口,一个接口表明要读写的内部寄存器,另一个接口表示读还是写

Untitled

读写操作

Untitled

注意:

  1. 在向接口传递和接受数据的时候,只能用累加寄存区 A
  2. nop : 空操作延时,因为读写接口的速度相较于cpu的速度而言会比较慢,需要等待

程序源码

  • 数据段定义了一个字符表和一个显示串

Untitled

  • 定义了两个宏:读取对应接口的数据,写字符
  • 取出的端口的地址是一个压缩BCD码,需要把它转换为ASCI码的字符
  • 实模式下 shr 的参数只能是寄存器和立即数1

Untitled

Untitled

  • 显示星期

Untitled

Untitled

posted @ 2025-09-15 17:05  Miaops  阅读(9)  评论(0)    收藏  举报