汇编语言
第一章
①字 占16位 字节 占8位 1kb=1024byte(字节) 1byte=8bit(位)
②cpu 中,指令和数据都是二进制形式存在 磁盘的数据 CPU无法直接使用,只能读到内存中,才能被使用
③cpu在数据读写时,必须和外部芯片进行3类信息交换:
1、地址信息 地址总线
2、控制信息 控制总线
3、数据信息 数据总线
④存储器:随机存储器RAM 只读存储器ROM
1、随机存储器:断电后数据消失,如内存,显存
2、只读存储器:关机后内存不消失,如主板,网卡的BIOS
⑤8086CPU的内存地址分配:
00000—9FFFF为主存储器
A0000—BFFFF为显存地址空间
C0000—FFFFF为各类ROM地址空间
第二章
①CPU主要有运算器,控制器,寄存器,三部分组成
②8086通用寄存器: AX BX CX DX
③简单的汇编指令:mov add sub
例:mov ax,18 add ax ,ax
④8086共有20位地址总线,即可传送20位数据,寻址能力为2的20次方个字节 即1MB
但8086为16位CPU结构,每次处理16位
所以 物理地址=段地址*16+偏移地址 (ds:bx cs:ip)
第三章
①DS寄存器用来存储访问数据的段地址 BX通用寄存器用来存放访问数据的偏移地址
②栈的定义:先进后出 入栈push 出栈pop
CPU是通过段寄存器SS和寄存器SP来确定栈的位置和栈顶的位置
SP里面就是栈顶的地址,CPU执行就是SS:IP 处执行 注意入栈超界和出栈超界
③debug的使用:
1、R命令查看、改变CPU寄存器的内容
2、D命令查看内存中的内容
3、E命令改写内存中的内容
4、U命令将内存中的机器指令翻译成汇编指令
5、T命令执行一条机器指令
6、A命令以汇编指令的格式在内存中写入一条机器指令
第四章
①汇编语言编译执行过程
1、汇编指令的编写 建议工具UltaEdit
2、修改文件格式为.asm格式文件
3、用masm进行编译,得到目标文件.obj 以二进制形式存在
4、用Link进行连接,得到.exe可执行文件
5、加载即可执行(初期可用debug进行调试)
②程序结尾代码:
mov ax,4c00H
int 21H
③程序框架:
assume cs:code
code segment // 编码起始端
......
code ends //编码结束端
end //编译器结束
第五章
①[bx] 表示偏移地址 编译器(不认识 [0])和DEBUG的区别
②loop循环指令 用法结构:
s: //要循环标记
loop s // cx 不为0 便进行循环
③debug中对loop循环的调试 引入 g 命令的用法: g 0020:0 直接跳转地址 p 命令直接结束循环
④ffff:0—ffff:20 到 0020:0—0020:20 内存信息转移 充分理解指令信息
⑤一段安全的地址空间 00200h—002ffh的256个字节的地址
④段前缀:"ds","cs","ss","es"。
第六章
1、在代码段中使用数据 框架:
2、在代码段中使用栈 框架:
实现逆序存放数据,充分理解程序含义。
3、代码段、数据段、栈段
第七章
1、and 指令:逻辑与指令,按位进行与运算
or指令:逻辑或指令,按位或进行或运算
2、ASCII码 理解 地址:https://baike.baidu.com/item/ASCII/309296?fr=aladdin&fromid=19660475&fromtitle=ascii%E7%A0%81%E8%A1%A8
3、以字符形式给出数据: data segment
dw 'unicode'
data ends
4、汇编语言中大小写字母转化的问题 这个根据ASCII码
以大小写A为例 进行理解
在二进制中 大小写字母 仅仅在第五位有不同 大写字母第五位为0 小写字母第五位为1
(编程中可通过第五位进行与或运算进行大小写的转化:具体以代码为例进行思考)
在十六进制中 小写字母相差20H
5、si和di 寄存器的理解
和bx 寄存器功能相近, 但 不能分为两个八位寄存器 就是说si和di 是16位寄存器
6、灵活的寻址:
[bx]
[bx+idata]
[bx+si+idata]
等等一些寻址 进行灵活运用
注意: 书写方式有很多具体一书为例
7、对栈的进一步理解: (这里是重点)
数据暂存的使用 : 书中以嵌套循环进行讲解
cx 表示循环计数器,在嵌套循环中内存循环要改变cx值会导致外层循环出错,此时要对外层循环进行数据的暂存
即对cx进行入栈和出栈的操作