关闭

学习16位DOS汇编笔记

235人阅读 评论(0) 收藏 举报
分类:
ax       //是16位的寄存器,最大可以存65535
ah,al  //是8位的寄存器,最大可以存255

cs:ip  //指向程序下一条执行的指令
ds     //数据段寄存器
ss     //栈段寄存器
sp     //栈顶指针

物理地址=段地址*16(十进制)+偏移地址
物理地址=段地址*10(十六进制)+偏移地址
物理地址20030 段地址2000 偏移地址30

Debug的常用命令
r //查看和修改寄存器
d //查看内存
e //修改内存
u //反汇编
t //单步执行
a //写汇编指令
g //相当直接运行
p //执行完返回

jmp 2000:0030  //相当于mov cs,2000;mov ip,0030,但不能直接给段寄存器传数据

//计算2的n次方
2000:0000 mov ax,1
2000:0003 add ax,ax
2000:0005 jmp 2000:0003


//查看rom的刷写时间,但是无法修改
-d fff0:0000 ff


//ds段寄存器不能直接传递数据,可以通过寄存器来传递
mov bx,1000
mov ds,bx
mov al,[0]
mov [10],al

//压栈和出栈,一个栈的最大是0-ffffh,64KB
mov ax,1000H
mov ss,ax
mov sp,ffea
push ax  //sp减2
push bx  //sp减2
pop ax   //sp加2
pop bx   //sp加2

//
mov bx,0100h
mov ax,[bx] //将0100地址的数据传递给ax
mov [bx],ax //将ax的数据传递给bx指向的地址

mov ax,ds:[0]  //MASM32 汇编里的表示


//and指令

mov al,01100011b

and al, 00111011b  ;将操作对象的相应位设为0, 其他位不变

结果 00100011b


//or指令

mov al, 01100011b

or  al,   00111011b   ;将操作对象的相应位设为1,其他位不变

结果     01111011b


// bx=61h, 一个字母, 不管它原来是大写还是小写, 将它的二进制第5位置0,  肯定就是大写字母了, and al, 11011111h

mov al,[bx]

and al,dfh  ;转换成大小'A'   41H

mov [bx],al


mov al, [5+bx]    ; 指明一个内存单元

si和di寄存器和ax,bx类似, 只是不能拆分为两个8位寄存器

//各种寻址方式
[idata]
[bx]
[bx+idata]
[bx+si]
[bx+si+idata]
只有bx, si, di, bp这四个寄存器可以进行寻址


db 重复的次数 dup (重复的字节型数据)

dw 重复的次数 dup (重复的字型数据)

dd 重复的次数 dup (重复的双字型数据)


db 3 dup (0)

db 3 dup (0,1,2)

db 3 dup('abc', 'ABC')


dos和其他合法的程序一般不会使用0:200-0:2ff(00200-002ff)这256个字节的空间


待续......

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:948220次
    • 积分:11629
    • 等级:
    • 排名:第1305名
    • 原创:371篇
    • 转载:42篇
    • 译文:0篇
    • 评论:130条
    最新评论