该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
指令集是根据x86指令集改编的,属于CISC,计算机处理器模式是pmode和rmode还有smm的混合品种。计算机体系架构是范纽曼架构
指令如下
描述表:
mjmp 0000h//由目前cs:ip+0000h 其中cs:ip到0000h直接的内存空间为中断向量表 l 0000h //中断服务程序地址 (ffffh是系统中断服务程序地址)
lk 00000000b //初始化区域位0=1 初始化键盘控制芯片 位1=1 初始化CLI控制器//不会清除显示缓冲区 位2=1 初始化计时器 位3=1 初始化网络适配器//同时会初始化串类指令控制芯片 位4=1 初始化CPU 位5=1 初始化端口集//重启所有端口连接 位6=1 初始化转码控制器 其他位保留
cs 0000h //cs段基址
ds 0000h //ds段基址
ss 0000h //ss段基址
es 0000h //es段基址
数据传输:
MOV
XCHG
PUSH
POP
LES
LDS
HES
HDS
OUT
IN
逻辑运算:
ADD
SUB
CMP
MUL
DIV
OR
AND
NOT
XOR
串类指令: //由于串操作非常费时,所以串操作由串类指令管理器处理和CPU并行,属于第二线程指令
MOVL AX->BX 或 AX-DX CX为字符数量
CMPL AXBX 串比较 CX为字符数量
SPHL AX->BX 串搜索 DX为搜索字符数量 CX为被搜索字符数量
键盘特殊串类指令: //由于键盘也属于串类指令,所以也由串类指令管理器配合键盘管理芯片共同处理属于第二线程指令
INSL 输入字符到AH
INHL 输入字符串到ES:DI,CX为字符数量
键盘管理芯片地址为64H其指令如下
out 6Ah,00000001b //从DS:BX写入屏蔽字符,cx为字符数量最多不能超过8
out 6Ah,00000010b //清空屏蔽字符寄存器
out 6Ah,00000011b //从DS:DI写入结束字符,cx为字符数量最多不能超过8
out 6Ah,00000100b //清空结束字符寄存器
out 6Ah,00000101b //从DS:SI写入过滤字符,cx为字符数量最多不能超过8
out 6Ah,00000110b //清空过滤字符寄存器
out 6Ah,00000111b //从DS:DX写入响应字符,cx为字符数量最多不能超过4
out 6Ah,00001000b //清空响应字符寄存器
out 6Ah,00001001b //键盘键入字符需要回显
out 6Ah,00001010b //键盘键入字符不要回显
键盘管理芯片状态寄存器地址为6BH其指令如下
IN AH,6BH //写入键盘管理芯片的状态寄存器内容,其寄存器编码格式。位0=1缓冲区满,位1=1屏蔽字符寄存器有数据,位2=1结束字符寄存器有数据,位3=1过滤字符寄存器有数据,位4=1响应字符寄存器有数据 位5=1键入字符回显 其他位均保留
//响应字符长度为1个字,高byte为响应字符编码,低byte为键入该字符后跳转到何处执行的CS偏移量
端口控制器:
MOVF AX->BL //串传输,BX存储的地址类型为端口
CMPF AX->BL //串比较,BX存储的地址类型为端口
SPHF AX->BL //串搜索,BX存储的地址类型为端口
端口集分别有8个端口地址分别是10h 20h 30h 40h 50h 60h 70h 80h当外接设备访问端口时,需先传输1byte的设备码,然后传输1byte的设备类型码 //设备码的存储地址为端口地址+01h,设备类型码的存储地址为端口地址+02h
[000] [000] [00]
是否具有存储特性 设备类型 设备标识码
000=无 001=只读 000=无
010=只写 001=存储
011=可读可写 010=打印
100=端口数据位控制 011=音频
100=其他
以上传输的编码为外接设备的数字签名接下来就是设备等待计算机的内部程序调用了
程序调用设备时只需传输设备码和类型码到09h即可例如
mov ah,设备码
mov al,类型码
out 09h,ax
然后bx为符合数字签名的设备端口地址 如果为0000h则代表设备未连接
然后程序可以用out in或者端口集串类指令对设备进行操作
注意每个端口都有自己的地址累加器地址为端口地址+03h
out 端口地址+04h,0001h //停止与设备的通信,然后传输DL的内存给该设备作为停止理由
程序转移:
jmp
j* *为标志位首字母,该标志位为1则执行[cs:ip+0001h]否则[cs:ip+0002h]
循环:
LOOP CX为0则不执行循环否则,LOOP 5 [cs:ip-0005h],CX-1
中断:
INT //软中断指令,类型码由中断控制器自动生成,其中断向量换算公式为:n*4+中断服务程序首地址,类型码定义了中断返回优先级
IRET //中断返回指令,返回中断向量表中类型号最高的断点处执行
计时器中断:
out 40h,ax //ax为初值,计数器将会以1s的速度累减ax,直到等于0,然后触发中断
out 41h,ax //ax为初值,计数器将会以1s的速度累减ax,直到等于1,然后程序继续执行
网络适配器:
out 50h,00000001b //连接网络
out 50h,00000010b //断开网络
out 50h,00000011b //以TCP协议通信
out 50h,00000100b //以UDP协议通信
out 50h,00000101b //网络忙状态
out 50h,00000110b //取消网络忙状态
out 52h,xxxxxxxxxb //给PO寄存器赋值
in al,53h //获取网络适配器状态寄存器内容,状态寄存器数据格式位0=1 通信协议为tcp反则是udp 位1=1 网络忙 位2=1 PO寄存器有值 位3=1 51h寄存器有值 其他位保留
in ax,51h //获取自己IP(连接网络后,网关给予的端口地址被存储在地址为51h的存储器当中)
out 52h,ax //对方IP,IP为ax,一旦IP不为0000h那么数据包将会被传输到指定地址 (网关若发现目标IP为0000h,直接丢弃该包)
选好协议,直接用端口串类指令进行数据发送即可 //数据接收会直接被存储到ES:PO当中
等待指令:
NHKL //程序暂停运行,等待网络数据传输结束
NOPL //程序暂停运行,等待第二线程指令运行结束
NOP //空转一个指令周期
cli控制器:
数据端口地址:5Ah
编程端口地址:5Bh
状态寄存器端口地址:5Ch
out 5Bh,00000001b 清除显示缓冲区内容
out 5Bh,00000010b 关闭显示缓冲区 //不会改变缓冲区内容
out 5Bh,00000011b 开启显示缓冲区
out 5Bh,00000100b 打印二进制
out 5Bh,00000101b 打印十进制
out 5Bh,00000110b 打印TUP编码
in al,5Ch //获取cli状态寄存器内容,格式:位0=1 缓冲区满 位1=1 缓冲区发生溢出 位2=1缓冲区开启 01=打印二进制模式 其他位保留 10=打印十进制模式 11=打印TUP编码模式
串类编码转换器数据端口地址:
4Ah编程端口地址:4Bh
状态寄存器端口地址:4Ch
out 4Bh,00000001b 暂停转码
out 4Bh,00000010b 继续转码
out 4Bh,00000011b BIN->BCD //AX->BXout 4Bh,00000100b BCD->BIN //AX->BX
cx 最大不能超过16
该体系计算机唯一的硬中断为计时器中断(并且可控)
ufl cs,ip 物理地址计算指令,结果保存到ax
过程调用:
CALL //过程调用 CALL ax=CS:AX也就是相当于mov ip,ax 与中断不同的是过程调用是在程序内调用而且速度非常快也就是执行一个jmp指令的时间
RET //过程返回
end 程序运行结束 //由于该体系的系统架构比较特殊,所以程序结束并不是使用处理器暂停指令和中断返回指令
网络适配器和转码器的指令还在简化当中,同时描述表也还在简化当中,一旦指令集成型,1个月就能将电路搞定