西电微机原理-第三章 Intel处理器指令系统及汇编语言(4)
八、字符串和数组

基本字符串操作指令

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

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

实模式 基址+变址寻址中,基址和变址寄存器是受限的
| 基址 | BX | BP |
|---|---|---|
| 变址 | SI | DI |
一般不用BP【访问堆栈】,所以只有两种组合 (bx,si) || (bx, di)




寻址方式总结
九、宏
定义



LOCAL 确保跳转时不会出现混乱
宏 和 子程序调用的区别
共同点:都是一种程序简化的方式
- 占用的内存空间更大:拷贝到源程序中,代码会有多份;子程序只会有一份
- 参数传递方式比较单一:宏调用是的参数有汇编通过实参替换形参的方式进行;子程序的参数可以通过寄存器,堆栈或者约定的内存单元传递。
- 处理更快:宏调用是在汇编时完成,运行无需额外的开销;子程序调用和返回均需要时间,而且涉及堆栈,速度慢。
十、使用I/O端口控制硬件
基本原理:读写接口地址

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

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

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

例子:实时钟RTC
寄存器与芯片引脚


实时钟芯片内部虽然有64个寄存器,但不可能都直接向外引出接口。
而是内部进行编号,只向外引出两个接口,一个接口表明要读写的内部寄存器,另一个接口表示读还是写

读写操作

注意:
- 在向接口传递和接受数据的时候,只能用累加寄存区
A nop: 空操作延时,因为读写接口的速度相较于cpu的速度而言会比较慢,需要等待
程序源码
- 数据段定义了一个字符表和一个显示串

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


- 显示星期



浙公网安备 33010602011771号