学习笔记 - Assembly 汇编语言

Remember  记忆

理解部分

计算机语言

语言即由符号组成,搭配表达各种意思,而计算机语言的符号搭配表示计算机的各种命令,再转换成电平脉冲信号形式用来控制操作计算机

例如:mov bx ax 是汇编语言的符号搭配而成,表示控制8086CPU把寄存器BX的数据送到AX的命令,mov bx ax以其二进制形式存储在计算机中,再通过编译软件翻译成对应的二进制机器语言1000100111011000,而数据在电脑中是以脉冲形式传递,0代表低,1代表高,就这样向8086CPU的16个输入端口,同时输入高低为1000100111011000(1代表高0代表低)的电平电脉冲,就能控制8086CPU把寄存器BX的数据送到AX

电脑工作原理

CPU与计算机的所有存储器(内存,显卡缓存,声卡缓存等)连接,并通过地址,控制,数据总线对其进行读取

内存地址空间

计算机所有内存单元的集合必须小于最大内存地址空间,2的n(地址总线宽度)次方

段地址

用两个地址(16*2)来指出要寻找的地址的一种方法,从而使寻址范围更广,但收地址总线宽度的约束

起始地址=段地址*16

内存地址=起始地址+编译地址

指令的寻址执行过程

questionOne:从内存读取指令时,如何知道所读取指令的长度,并按照这个长度从内存读取相应个数的储存单元

代码段

cs:ip指向

数据段

[address]指向

栈(stack):

ss:sp 指向

字单元

两个内存单元

程序返回

Start的意义

设置代码段的编译地址,并通过编译存储在执行文件的描述信息中

ASCII码

doc中EXE文件的加载过程

记忆部分

语法

'...........' 以字符形式给出数据的形式

[bx+5]=5[bx]

bx:[40H]表示内存单元的数据

汇编指令

mov

mov ip/sp/ax,数据

mov [0],cx

mov ds,cx

mov cx,ds

-----------

mov ax,stack  //段名相当于段地址

mov ss,ax

mov  sp,12    //设置栈顶ss:sp指向 stack:12 

------------

数据只能和寄存器,或偏移地址

jmp 45:3a09   //执行后 cs=0045H ip=3a09H,

jmp ax //ip=ax

add

sub

pop

push

 

s: .....

loop s  //  loop 标号,cx中存放循环次数

inc  +1

dw  :在内存写入数据

and al,01000000B:可将操作对象相应位设为0
or al,01000000B:可将操作对象相应位设为1

db '.....':定义字节数据与dw差不多

伪的:

段声明

name segment

assume cs/ds/ss:name  // 指示该段是什么段

         .................数据..................

start: ......................................... //start 处 cs地址

          .................代码................

          .........................................

mov ax,4c00

int 21H                    //程序返回

name ends

end  start//总程序结束标志,表示程序入口为start:

汇编debug调试指令

20多个 常用的有:
 R 查看改变CPU寄存器的内容
D 查看内存内容
E 改写内存内容
U 将内存中的机器指令翻译成汇编指令
T 执行一条机器指令
A 以汇编格式在内存中写入一条机器指令

Q退出

详细:

r:查看现寄存器状态
r ax:修改ax寄存器内容,IP cs也可以修改
d:列出内存中预示/续后地址的内容
d 起始地址(段地址:偏移地址):查指定地址开始的16*8个内存单元的内容
d 起始地址(段地址:偏移地址) 结尾偏移地址:指定范围查看内存单元
e 起始地址(段地址:偏移地址):带提示地修改内容
e 起始地址(段地址:偏移地址) 数据 数据 ...n个...:修改从指定地址开始的n个内存单元
u 起始地址(段地址:偏移地址):显示从这点地址开始的16行汇编指令与相应的数据形式
t:执行CS:IP指定的命令
a起始地址(段地址:偏移地址):从这点地址开始带提示的以汇编指令形式吧写入内存单元

调试编译过程

1.写好源程序保存成asm后缀

2.用dos运行masm或masm 文件名.asm,编译生成包含机器码的目标文件obj

  obj 生成文件的格式

  lst 列表文件,生成文件时的中间结果,不需要就直接按回车

  chf 交叉引用文件名,一样是中间结果

3.用link连接系统生成可执行文件(.exe)

   map 映像文件中间结果

   lib   要调用到得库文件

通用寄存器

AX(AH,AL),BX,

CX:存放loop 循环次数

DX

段寄存器

CS  : CS:IP指向代码执行的地址

DS  :  [address] = ds:address 处的数据,只能 mov ds ax

SS:sp   栈顶

ES

其它寄存器

 SI DI:与bx类型的寄存器,不能分成两个八位寄存器来用

内存物理地址的表示

段地址(16):编译地址(16)

程序载入时寄存器的状态

cx中存放程序的长度

ds程序所在内存区的段地址

程序从 ds-10 段开始,因为前面有psp区占据256(100h)字节

注意

指令两个操作数的位数应该一致

写入内存的数据顺序相反,因为书写是从高到低,43(高8位)21(低8位)H,而内存中是从低到高,2143

[数据]在源文件中被认为是直接的数据,而在debug中被认为是ds:数据单元的数据

所以在源代码中指定单元数据的方法有[bx],ds/cs/ss/es(段前缀):[0],

安全的内存空间:0:200~0:300

要把数据,代码,栈写到不同的的段里面

可以用内存单元来当寄存器,变量的作用

一般我们使用栈来暂存数据

使用P命令执行int 21

dw 一个2字节
db 一个1字节
寄存器:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di
段寄存器:ds,ss,cs,es
可以[寄存器]寻址的有:bx,si,di,bp,组合寻址:bx+si,bx+di,bp+si,bp+di,bx默认段地址在ds,bp默认段地址在ss

Learn&Use 学用

配置环境

MASM5:汇编常用工具的集合,包括link.exe及masm.exe

http://www.programfan.com/showdown.asp?id=171

编辑器下载

http://www.duote.com/soft/4230.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值