如何找到命令地址?
How to find commands addresses?
我是汇编编程的初学者,在这个问题上遇到了一些问题。所以下面命令的地址由 CS:IP
寄存器的内容定义。如果CS
等于0750h,IP
等于047Bh,找到所有命令的地址。假设所有命令的大小都是 3 个字节。
我发现地址等于segment * 10h + offset。这意味着 0750h * 10h + 047Bh = 797Bh。之后为了找到每个命令的地址,我只是将 3 添加到 797Bh?我说得对吗?
start:
mov ax, data
mov ds, ax
mov al,3Fh
mov ah,30h
cmp al,ah
jl p1
add ah,al
sub ah,30h
p1:
add al,ah
sub al,30h
mov ax, 4c00h
int 21h
ends
It's given that all the commands have a size of 3 bytes
这肯定是假的。往下看就知道了。
CS:IP = 0750h:047Bh
对应线性地址0000797Bh。
0000797B mov ax, data 3 bytes : opc + word immediate
0000797E mov ds, ax 2 bytes : opc + modr/m
00007980 mov al, 3Fh 2 bytes : opc + byte immediate
00007982 mov ah, 30h 2 bytes : opc + byte immediate
00007984 cmp al, ah 2 bytes : opc + modr/m
00007986 jl p1 2 bytes : opc + byte displacement
00007988 add ah, al 2 bytes : opc + modr/m
0000798A sub ah, 30h 3 bytes : opc + modr/m + byte immediate
p1:
0000798D add al, ah 2 bytes : opc + modr/m
0000798F sub al, 30h 2 bytes : opc + byte immediate
00007991 mov ax, 4c00h 3 bytes : opc + word immediate
00007994 int 21h 2 bytes : opc + byte immediate
我是汇编编程的初学者,在这个问题上遇到了一些问题。所以下面命令的地址由 CS:IP
寄存器的内容定义。如果CS
等于0750h,IP
等于047Bh,找到所有命令的地址。假设所有命令的大小都是 3 个字节。
我发现地址等于segment * 10h + offset。这意味着 0750h * 10h + 047Bh = 797Bh。之后为了找到每个命令的地址,我只是将 3 添加到 797Bh?我说得对吗?
start:
mov ax, data
mov ds, ax
mov al,3Fh
mov ah,30h
cmp al,ah
jl p1
add ah,al
sub ah,30h
p1:
add al,ah
sub al,30h
mov ax, 4c00h
int 21h
ends
It's given that all the commands have a size of 3 bytes
这肯定是假的。往下看就知道了。
CS:IP = 0750h:047Bh
对应线性地址0000797Bh。
0000797B mov ax, data 3 bytes : opc + word immediate
0000797E mov ds, ax 2 bytes : opc + modr/m
00007980 mov al, 3Fh 2 bytes : opc + byte immediate
00007982 mov ah, 30h 2 bytes : opc + byte immediate
00007984 cmp al, ah 2 bytes : opc + modr/m
00007986 jl p1 2 bytes : opc + byte displacement
00007988 add ah, al 2 bytes : opc + modr/m
0000798A sub ah, 30h 3 bytes : opc + modr/m + byte immediate
p1:
0000798D add al, ah 2 bytes : opc + modr/m
0000798F sub al, 30h 2 bytes : opc + byte immediate
00007991 mov ax, 4c00h 3 bytes : opc + word immediate
00007994 int 21h 2 bytes : opc + byte immediate