汇编语言
寄存器
一个典型的cpu由运算器,控制器,寄存器等器件组成,这些器件靠内部总线相连。
cpu中:
- 运算器进行信息处理
- 寄存器进行信息储存
- 控制总线控制各种器件进行工作
- 内部总线连接各种器件,在他们之间进行数据的传送
一个内存单元可存放8位数据,cpu中的寄存器又可存放n个8位的数据,也就说计算机中的数据大多是由1~n个8位数据构成的。
为区分不同进制,在十六进制表示的数据后面加H,在二进制表示的数据后面加B。
几条汇编指令
汇编指令 | 控制cpu完成的操作 |
---|---|
mov ax,18 | 将18送入寄存器ax |
mov ah,78 | 将78送入寄存器ah |
add ax,8 | 将寄存器ax中的数值加8 |
mov ax,bx | 将寄存器bx中的数据送入寄存器ax |
add ax,bx | 将ax和bx中的数值相加,结果存在ax中 |
-
在写一条汇编指令或一个寄存器的名称时不区分大小写
-
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的
物理地址
cpu访问内存单元时,要给出内存单元的地址。
cpu中给出物理(内存)地址的方法:物理地址=段地址*16+偏移地址
CS和IP
cs为代码段寄存器,ip为指令指针寄存器
设cs中的内容为m,ip中的内容为n,cpu将从内存m*16+n单元开始,读取下一条指令并且执行
- cs和ip,它们的内容提供了cpu要执行指令的地址
- cpu将cs和ip中的内容当作指令
cpu大部分寄存器的值,都可以用move指令来改变,move指令被称为传送指令,但是,move指令不能用于设置cs和ip的值
能改变cs,ip的内容的指令被统称为转移指令:jmp指令
若想同时改变cs,ip的内容,可以用**“jmp段地址:偏移地址”**完成
列如:jmp 2AE3:3,执行后:cs=2AE3H,IP=0003H,cpu将从2AE33H处读取指令
若想仅修改ip的内容,可用形如**“jmp 某一合法寄存器”**的指令完成
列如:jmp ax ,执行指令前:ax=1000H,cs=2000H,ip=0003H
执行指令后:ax=1000H,cs=2000H,ip=0003H
"jmp 某一合法寄存器"指令的功能为:用寄存器中的值修改ip
cpu只认被cs:ip指向的内存单元中的内容为指令
查看cpu和内存,用机器指令和汇编指令编程
debug 是windows提供的实模式程序的调试工具。使用它可以查看cpu各种寄存器中的内容,内存情况和机器码级跟踪程序的运行。
常用到的debug功能
- 用debug的R指令查看,改变cpu寄存器的内容
- 用debug的D指令查看内存中的内容
- 用debug的E指令改写内存中的内容
- 用debug的U指令将内存中的机器指令翻译成汇编指令
- 用debug的T指令执行一条机器指令
- 用debug的A指令以汇编指令的格式在内存中写入一条机器指令