汇编语言学习笔记

1、debug 调试工具

参数:

-r    显示所有寄存器状态,可以修改寄存器内容(形如-r ax)

-d    显示从当前cs:ip位置之后的128个字节,可以指定地址打印(形如: -d 段地址:偏移地址)

-u    将cs:ip位置后续的字节翻译成汇编指令,可以制定地址翻译(形如: -u 段地址:偏移地址)

-a    在当前cs:ip位置处写指令,可以制定地址(形如: -a 段地址:偏移地址)

-t    执行当前cs:ip所指向的指令

-p    将当前循环体执行结束

-e    段地址:偏移地址 修改指定位置处开始后续的字节

-g    偏移地址 从cs:ip位置处开始,执行指令到指定位置处

2、

Byte = 8bit (字节型数据) =>  一个内存地址就能保存一个字节

Word = 2Byte = 16bit (字型数据) =>  一个字需要2个连续的内存单元来存放 高位地址存放高位字节 低位地址存放低位字节

3、寄存器

段地址 : 偏移地址
ds   si
es   di
ss   bp
cs   ip
    sp
    bx

cs:ip      所指向的内容为指令
ds:[0]    所指向的内容为数据(也可以为采用显式的表达方式: ds:[bx]等)
ds:[si]    数据从哪里来,一般的默认组合,也可以是ds:[bx+si+2]、ds:[bx+di]等
es:[di]    数据放到哪里去,同上
ss:sp      指向栈的栈顶数据,栈是以字为单位存放数据的

bx默认和ds是一对,ds:[bx]
bp默认是和ss是一对,ss:[bp]

4、指令执行的过程

<1> CPU从cs:ip所组成的地址中读取指令,将这个指令放到指令缓存器中
<2> IP = IP + 所读指令的字节数
<3> 执行指令缓存器中的内容,回到<1>继续执行

5、push、pop

push   sp - 2,将指定的数据放到ss:sp所指向的内存空间
pop    将ss:sp处的数据弹出到指定位置,pop + 2

6、loop

loop s    s 位标号

loop 条件转移指令(短转移),运行到loop指令时,cx -= 1,如果 cx == 0 循环结束,否则跳转到标号处继续执行
cx   存放循环的次数

7、数据不能以字母开头,如:FFFFH需要写成0FFFFH

8、安全的内存

0:200H ~ 0:2FFH 256个字节
0:7E00H之后

9、内存的分配是按16字节的倍数分配的

10、

db(define byte)   定义字节型数据,占1个字节
dw(define word)    定义字型数据,占2个字节
dd(define double)    定义双字型数据,占4个字节

11、定义data segment和stack segment后,数据和栈存放的内存与指令存放的内存相邻(不足16字节要补齐),即与cs:ip位置相邻,但是ds和ss还需要人为设置

12、大小写转换问题

字符   ASCII码  二进制形式
A    41H    0100 0001B
B    42H    0100 0010B
C    43H    0100 0011B

a    61H    0110 0001B
b    62H    0110 0010B
c    63H    0110 0011B

大写 –> 小写  or 0010 0000B
小写 –> 大写  and 1101 1111B

小写 or 0010 0000B  =  小写
大写 and 1101 1111B  =  大写

13、

//以字的形式处理数据
mov word ptr ds:[0],1

//以字节的形式处理数据
mov byte ptr ds:[0],1

//以双字型的形式处理数据
mov dword ptr ds:[0],1

14、div

<1>除数 8bit或者16bit,存放在内存单元或者寄存器(一般bl/bx)中

<2>被除数 AX或者 AX和DX中
如果除数为8bit,被除数则为16bit,存放在AX中
如果除数为16bit,被除数则为32bit

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值