Я хочу напечатать AAAA со следующим:сборка системного вызова неэффективная
BITS 32;
;write;
push 0x41414141;
pop ecx ;
mov eax, 4 ; write is syscall 4 for Ubuntu 32-bit
mov ebx, 1 ; stdout
mov edx, 4 ;
int 0x80 ;
;exit;
mov eax, 1 ;
mov ebx, 0 ;
int 0x80 ;
Тем не менее, после сборки и связан этот код только выходит, никаких ошибок, что не так?
Какую документацию вы использовали для вызова 'int 80h'? Что говорит об аргументе 'ecx'? (btw, в сборке «;» означает «комментарий» .. почему вы помещаете пустой комментарий в каждую строку? .. вам не обязательно) – Ped7g
ecx должен содержать указатель на строку. 0x80 означает один бит выше предела ascii, таким образом, в ОС. – Yvain
Значение 0x80 равно 128, что ** является ** выше классического 7-битного ASCII, как вы заявили. Но это не имеет никакого значения для инструкции 'int', которая может вызывать процедуру прерывания для любого 8-битного числа от 0 до 255 (с' int 3', имеющим также специальный выделенный однобайтовый код операции, используемый отладчиками для точки прерывания) , не заботясь об этом отношении с ASCII. Для него стоит таблица векторов прерываний, где адрес элемента [0x80] должен указывать на некоторый допустимый обработчик (в этом случае Linux OS я полагаю). Если Linux будет использовать обработчик 0x41, вы будете делать 'int 'A'' вместо ...: D – Ped7g