|
发表于 2017-4-24 17:13:12
|
显示全部楼层
本帖最后由 人造人 于 2017-4-24 17:15 编辑
- assume cs:code
- code segment
- start:
- jmp e
- xor ax, ax
- e:
- mov ax, 4c00h
- int 21h
- code ends
- end start
复制代码
D:\Masm615>debug test.exe
-u
0BB3:0000 EB02 JMP 0004
0BB3:0002 33C0 XOR AX,AX
0BB3:0004 B8004C MOV AX,4C00
0BB3:0007 CD21 INT 21
0BB3:0009 004CCD ADD [SI-33],CL
0BB3:000C 2121 AND [BX+DI],SP
0BB3:000E 2E CS:
0BB3:000F A10A92 MOV AX,[920A]
0BB3:0012 0AE4 OR AH,AH
0BB3:0014 753D JNZ 0053
0BB3:0016 8AE8 MOV CH,AL
0BB3:0018 2E CS:
0BB3:0019 8B160C92 MOV DX,[920C]
0BB3:001D 83FB01 CMP BX,+01
-
可以看到 jmp e 这条指令被翻译为 jmp 0004,也就是转移到地址 0BB3:0004
汇编语言只是机器语言的助记符,cpu不认识 jmp 0004 是什么
cpu认识 EB02
EB02 在这里就是 jmp 0004,jmp 0004 是 EB02 的助记符,你用masm可以直接写 jmp e,编译器在这个程序中帮你翻译成 EB02,如果你要用机器语言来写,可以,不过,如果我现在要转移到 MOV AX,[920A]
那就需要一个字节一个字节的数偏移了^_^
在当前程序中
EB00 转移到 33
EB01 转移到 C0
EB02 转移到 B8
这正是 MOV AX,4C00 的第一个字节
哦,不对,应该是第零个字节^_^
jmp e
xor ax, ax
e:
mov ax, 4c00h
在接下来的学习中,你要记住,汇编语言真的只是机器语言的助记符,只有这样,你才能明白后面将会遇到的一些难题
|
|