1
cs:ip    //执行该行

写文件名不要带. 如6.4.asm

Debug

-R
1
-r //查看,改变cpu寄存器内容

1
-r ax  //修改ax
-D
1
-d 段地址:偏移地址  //查询此物理地址

(1)左侧为起始地址

(2)中间为机器码

(3)右侧为每个机器码对应的可见字符,不可见为’.’

-E
1
-e 段地址:偏移地址  1 2 3 4 5   //修改此内存中内容

还有一种操作

直接改字符

更甚者,字符串

-u
1
-u  段地址:偏移地址  //将机器码转化成汇编

-t
1
-t  //执行cs:ip指向的指令
-a
1
-a  段地址:偏移地址 //以汇编的方式转化成机器码向内存写入机器指令
-g
1
-g 0012 //跳转到0012
综上所述

DS 和 [address]

ds:段寄存器

1
2
3
4
mov bx,1000
mov ds,bx //不可直接mov ds,1000
mov al,[0] //[...]中0为偏移量,段地址自动读取ds
//上述三条将10000H(1000:0)中数据读到al

8086cpu不支持直接将数据送入段寄存器

1
2
3
4
//将寄存器数据送入内存单元10000H
mov bx,1000
mov ds,bx
mov [0],al

mov,add,sub

push,pop

1
2
3
ss:sp   //栈地址
push //sp=sp-2
pop //sp=sp+2

小心栈超界

ss性质如ds,不可直接赋值

执行push时,cpu先sp-2,再向ss:sp传送

执行pop时,cpu先读取ss:sp,再sp-2

第一个程序

伪指令

(一)

1
2
3
xxx segment

xxx ends

(二)

1
end   //标记整个程序结束

end与ends不同,ends与segment捆绑使用

(三)

1
assume 

假设某一寄存器与程序片段相关联

程序返回

1
2
mov ax,4c00H
int 21H

结束相关的概念

编译生成

1
2
3
4
//编译1.asm
masm 1;
link 1;
//生成1.exe

debug 1.exe

1
2
-p //int 21H
-u //查看

[bx]

1
mov ax,[bx]   //将ds:(bx)处的内存送往ax

(ax)表示ax的内容

loop

1
2
3
4
   mov cx,11
s: mov ax,ax
loop s
// 执行11次

masm