学习16位DOS汇编笔记

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值