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

Я новичок в программировании на ассемблере, и у меня возникли некоторые проблемы с этой проблемой. Таким образом, адреса приведенных ниже команд определяются содержимым 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 ответ

Дано, что все команды имеют размер 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
Другие вопросы по тегам