文章目录
第一章:基础知识
CPU对存储器的读写
地址总线
数据总线
控制总线
主板
接口卡
各类存储器芯片
内存地址空间
第二章:寄存器
通用寄存器
字在寄存器中的存储
Note:
8086CPU给出物理地址的方法
Note:
"段地址×16+偏移地址=物理地址"的本质含义
段的概念
Note:
段地址取起始地址的前16位,即10000H为起始地址的段,段地址为1000H;10080H为起始地址的段,段地址为1008H;
段寄存器
Note:
CS和IP
注解: 如果将数据当作指令使用就应该将CS:IP指向它。
修改CS、IP的地址
注意: 执行何处的指令取决于CS、IP
debug的使用
第三章:寄存器
内存中字的存储
例子: 存放4E20H,4E存在高地址单元,20存在低地址单元。
练习:
实现字的传送
例子:
Note:
将段地址送入DS的两种方式
(1) mov ds 1000H ❌
(2) mov bx 1000H ✔️
mov ds bx
原因:
DS和[address]
CPU提供的栈机制
栈顶超界问题
第四章 第一个程序
源程序从写出到执行的过程
补充:用汇编语言写源程序
补充:从源程序到程序运行
源程序
使用link指令
生成exe文件
执行p4-1
补充:用debug装载程序
第五章 [BX]和loop指令
[…]与(…)
[BX]
loop指令
loop和[BX]联合使用
即为放到ax中的8位寄存器中,再累加到dx中
段前缀
第六章 含多个段的程序
将数据、代码、栈放入不同的段
第七章 更灵活的定位内存地址的方法
处理字符串问题
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s:mov al,[bx]
and al,11011111b
mov [bx],al
inc bx
loop s
s0:mov al,[bx]
or al,00100000b
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
[bx+idata]
SI和DI
小练习:(程序保存在:sidi中)
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '................'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov si,0
mov di,16
mov cx,8
s:mov ax,[si] ;注意这里的两个内存没有直接交换,而是借助寄存器ax
mov [di],ax
add si,2
add di,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
[bx+si]和[bx+di]方式寻址
[bx+siidata+]和[bx+di+idata]方式寻址
不同的寻址方式应用以及演示
第八章 数据处理的两个基本问题
用于内存寻址的寄存器
在哪里?有多长?
有多长?
div指令
dup指令
第九章 转移指令的原理
转移综述
操作符offset