3
0
热心网友
伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作
segment
end
assume
CPU指令loops时,要进行两步:cx-1,若cs不为0跳转至s处指令,若为0向下执行
用mov设置cx的值,表示循环次数
mov ax, [bx+si+200]
mov ax, 200[bx][si]
mov ax, [bx][si].200
需要暂存数据的时候,一般用栈,比如双重循环的cx计数问题
模块化程序设计
call和ret配合实现子程序
使用寄存器传参,或者使用栈传参
在子程序开始时,将要用到的寄存器中内容全部入栈,退出时恢复,用来解决寄存器冲突问题
用中断类型码通过中断向量表找到中断处理程序的入口地址
中断向量表在内存中保存,存放256个中断源对应的中断处理程序的入口地址
一个表项占两个字,高地址字存放段地址,低地址字存放偏移地址
CPU在操控存储器时,把它们总的看做一个内存地址空间
和CPU通过总线相连的芯片除了存储器,还有各种接口卡上的接口芯片和主板上的接口芯片(连接外设)
这些芯片中,都有一组CPU可读写的寄存器,即端口
CPU的角度,对这些端口进行统一编址,建立了统一的端口地址空间
CPU可从以下三个地方读写数据:CPU内部寄存器、内存单元、端口
(1)可屏蔽中断
(2)不可屏蔽中断
(1)键盘输入
每个按键相当于一个开关,芯片对每个键的开关状态进行扫描
按下按键后,产生扫描码(通码),送入60h端口
松开按键后,产生扫描码(断码),送入60h端口
(2)引发9号中断
(3)执行int 9中断例程
int过程可以模拟为:
标志寄存器入栈,TF=1、IF=1,call dword ptr ds:[0]
端口和中断机制,是CPU进行IO的基础
a db 1,2,3
标号a后没有“: ”,它是同时描述内存地址和单元长度的标号,可以代表内存单元
mov al, a[bx+si+3]
a被称为数据标号,而带": "的被称为地址标号(只能在代码段中使用)
(1)存储标号偏移地址
(2)存储标号偏移地址和段地址
为了实现进程隔离和多任务并发,引入了保护模式,同时为实现虚拟内存提供了硬件支持
通过分段和分页机制来进行保护和隔离
(1)分段和分页
分段:引入GDT(全局描述符,即段表),表中的表项称为段描述符,段寄存器中存放索引(段选择子),通过索引找到表项,获取段信息,加上偏移地址得到线性地址,目的是在寻址过程中保存保护信息(比如内存段属性)
分页:将虚拟内存划分为大小相同的页,同时物理空间也分为若干个物理块(页框),二者大小相等,离散分配,通过MMU查页表,实现页号到物理块号的映射,目的是将内存分块,将暂时不用的块放到磁盘上,扩展空间
分段是必须的,分页不是必须的
段是二维的,大小不固定,页是一维的,大小固定
保护模式下,每个段都设置了特权级,高特权级的代码可以对地特权级数据进行访问
(2)四种地址
虚拟地址是没有经过分段和分页转化的地址,是段寄存器和变址寄存器的组合
逻辑地址是用户可以操作的地址,即偏移地址
线性地址是虚拟地址经过分段转化后的地址,可以定位虚拟内存
物理地址是线性地址经过分页转化后的地址
使用户可以方便地在保护模式下运行一个或多个原8086程序
DOS系统中,CPU以实模式运行
Windows系统中,CPU以保护模式运行
想在Windows中运行DOS程序,CPU切换至虚拟8086模式
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com
Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.