汇编语言

伪指令由编译器接管提示编译器未来工作状态,不属于程序本身
可执行文件的一个子程序运行的时候子程序接管cpu 之后程序放回 mov ax,4c00Hint 21H

编译原理:编辑(源程序.txt) 编译masm(源程序.txt .asm--列表文件.lst--交叉文件.crf--目标文件.obj) 连接link(目标文件.obj+库文件.lib--映像文件.map--可执行文件.exe)
可执行文件由操作系统外壳程序cmd加载进入内存,并设置cs:ip地址指向可执行程序的入口,之后交给cpu执行,执行完毕返回充cmd管理,cmd寻址sp:00(空闲内存区)加载psp(和dos通讯,256字节) 程序区从sp+10H开始写入

[]表示偏移量,()表示内容
() 里面是寄存器名,段寄存器名,内存地址名,表示字节和字,字节型一个字节,字型两个字节
mov [2],ax===>> ((ds)*16+2)=(ax)

push ax ===>> (sp)=(sp)-2  ((ss)*16+(sp))=(ax)
pop ax  ===>> (ax)((ss)*16+(sp)) (sp)=(sp)+2

inc bx 表示bx中的内容加一

循环功能框架
 mov cx,循环次数
s:
 循环程序段
 loop s

汇编数据不能以字母开头

p执行循环,t执行单步指令,g 0016 执行到cs:0016

汇编编译器 mov al,ds:[0]
连续内存单元访问问题,用一个寄存器保存递增偏移地址
汇编读取内存时根据你用的寄存器判断读取字节数
操作系统也被保存在内存中
汇编用and or 逻辑运算实现判断,必须分析数据的二进制结构
[bx+si+idata] [bp] 偏移地址相当于数组
si di是不可分的寄存器
数组直接面向内存空间,但是最大为16字节,每个字节可以存储范围内的数据,通过ascii码实现
转换大写and al,11011111b
转换小写or al,00100000b
二重循环实现对内存空间的定位,dx记录cx的外部循环,暂存数据使用栈

[bx]段地址ds [bp]段地址ss bx,bp,si,idata表示偏移地址,可以直接包括
汇编指令存储的三个位置,指令缓冲期,内存,ax寄存器
dw word db byte

mov word ptr ds:[0],1  指定数据长度

div除法  被除数在ax(除数byte ptr,商在al,余数在ah) 被除数在dx(高位)ax(低位)(除数word ptr,商在ax,余数在dx)
dd双字型 和dw db一样,存储数据,不过以32位被除数,读取的时候高位在dx,低位在ax mov ax,ds:[0] mov dx,ds:[2]  除数div word ptr ds:[4]
dup重复子段 db 3 dup(0,1,2) 相当于重复三次0 1 2 九个字符内存

offset 取得标号段的偏移地址
jmp short s 段内转移 goto   cpu执行jmp转移
jmp不包含目的地址,包含偏移量(从jmp后第一位到标号的位置的位移,jmp short八位转移,jmp near 16位转移
jmp far 包含地址的转移
jmp word ptr  jmp dword ptr  内存单元地址,改变ip偏移量放法

jcxz 如果cx=0,转移
dec 自减 --

80*25 彩色字符模式缓冲区B8000H-BFFFFH共32k空间(偶地址存放字符,奇地址存放属性),写入的数据会立即出现在显示器上(25行,每行80字符)

ret相当于pop ip
retf相当于pop cs:ip
call相当于push ip jmp near ptr 标号
call far ptr 标号 相当于 push cs push ip jmp far ptr

寄存器运算和存放的是可寻址地址和运算数据
call 16位reg(寄存器) 相当于push ip jmp 16位reg
call word ptr 内存单元地址 相当于push ip jmp word ptr
call dword ptr 内存单元地址相当于 push cs push ip jmp dword ptr

子程序框架
assum cs:code
code segment
main::
 :
 call sub1
 :
 mov ax,4c00h
 int 21h
sumb1::
 call sub2
 :
 ret
sumb2::
 :
 ret
code ends
end main


mul乘法  如果两个数都是八位一个默认al 一个在八位reg 或者内存字节单元
 如果都为16位,一个默认ax 一个在16位reg 或者内存字单元

mul reg 或者 mul byte ptr ds:[0]

运算指令add sub mul div inc or and 印象标志寄存器
传送指令mov push pop 不影响
flag标志寄存器第六位zf=1表示运算指令的结果为0,zf=0表示不为0
flag第二位标志寄存器pf=1表示运算结果的bite位的1的个数为偶数,否则为奇数
flag第七位sf=1表示运算结果为负数,否则非负
flag第零位cf记录了无符号数运算时进位值
flag第十一位记录有符号运算是否溢出,溢出=1,否=0
adc 比add多加了cf
sbb 比sub多减了cf
cmp减法相当于sub只是不记录结果只是对相应的标志寄存器更改

zf=1 说明ax=bx
zf=0 说明ax!=bx
cf=1 说明ax《bx
cf=0 说明ax》bx
cd=0 并且zf=0 说明ax》bx
cf=1后zf=0 说明ax《bx

cf无符号比较结果检测zf cf
cf有符号比较结果检测sf of zf
je zf=1转移
jne zf=0转移
jb cf=1转移
jnb cf=0转移
ja cf=0且zf=0转移
jna cf=0或zf=1转移

flag df方向位=1递减,=0 递增
movsw将ds:si指向的内存自单元的字送入es:di中,然后根据df为位的之,将si,di递增2或递减2
movsb递变1
rep movsb相当于 s: movsb loop s
cld设置df为0 std 设置df 1

pushf popf

ds:si ss:sp es:di

内中断有四个来源,当TF等标志寄存器变成1的时候引发中断,cpu获取中断类型,到中断向量表(0000-03ff 1k内存)中查找中断程序入口(先入栈保存当前标志寄存器,cs,ip信息以待返回)执行中断程序后返回原来工作状态   
int 7ch 引发7ch中断并进入7ch中断例程 


Rom中的BIOS包括硬件系统的检测和初始化程序 外部中断和内部中断例程 用于对硬件设备进行IO操作的中断例程 系统相关中断例程,BIOS是固化在内存的程序指令,cpu开机指向FFFF:0000的跳转指令指向BIOS中断向量表执行BIOS固化在ROM中的中断例程,硬件检测和初始化完成后执行int 19h 中断指向操作系统指令,之后cpu交由操作系统控制

B8000H-BFFFFH共32k内存空间80*25彩色字附魔师显示缓冲区

mov ax,4c00h int 21h 表示调用21h中断例程的第4c00号子程序
dh行号 dl列号 cl颜色

端口连接外设和主板
IF TF

可屏蔽中断he不可屏蔽中断

键盘处理通码(按下扫描码)断码(松开扫描码)送入60h端口(主板),产生9号可屏蔽中断当IF=1时执行9号BIOS例程
BIOS将扫描码和状态字送入BIOS内存

汇编指令系统

BIOS键盘缓冲区有16个字单元,可以存储15个按键扫描码和对应的ascII码,按下a键,60h端口扫描,如果有控制键转换状态字,送入缓冲区高位扫描码,低位ascii码
字符栈处理字符串

int13读写磁盘
操作系统,软件 提供了集合的中断例程

数据结构,栈,内存,字符栈,寄存器,地址(指针)
操作符 add mov sub mul div +-*/ and or
条件判断 标志寄存器
循环 loop
模块化编程 标志子程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值