Как найти адреса команд? - PullRequest
       42

Как найти адреса команд?

0 голосов
/ 13 февраля 2019

Я новичок в программировании на ассемблере, и у меня возникли некоторые проблемы с этой проблемой.Таким образом, адреса команд ниже определяются содержимым CS:IP регистров.Если CS равно 0750h, а IP равно 047Bh, найдите все адреса команд.Дано, что все команды имеют размер 3 байта.

Я обнаружил, что адрес равен сегмент * 10h + смещение .Это означает 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

1 Ответ

0 голосов
/ 21 февраля 2019

С учетом того, что все команды имеют размер 3 байта

Это, безусловно, неверно.Смотрите ниже, чтобы узнать.

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
...