Опять я со своими тупыми вопросами) Конструкция типа "mov byte [cl], '$'" не работает - "Error: reserved word used as symbol". приходится делать "xor eсx,eсx" и после записи в cl писать "mov byte [ecx], '$'", что в сумме занимает целых 7 байт) Есть ли какой-нибудь другой вариант записи?
fasm тут ни причём - это интел не предусмотрела такую бессмысленную конструкцию как адресация памяти через 8 битный регистр
Чьорд, значит, прога будет весить на пару десятков байт больше, чем хотелось бы) Хотя хорошо еще, что через ecx работает) Спасибо за ответ)
А что должно? movzx ecx,cl ; 0F B6 C9 mov byte [ecx], '$' ; C6 01 '$' 6 байт movzx esp,cl ; 0F B6 E1 push '$' ; 6A '$' 5 байт если бы вы сохраняли al можно было бы обойтись и 4-мя movzx edi,cl stosb итд
sysenter В зависимости от ситуации это может быть не важно. Например, куча сохранений в вектор, но без обращений к стеку. push esp тут не только сохранит, но и сдвинет. А на концах участка mov A,esp ... mov esp,A. Где А - регистр или стат переменнная.
AxXxB Не понятно, что ты пишешь, может быть драйвер какого-то нестандартного устройства с 256 байтами памяти на борту, но: 1) если у тебя есть неизменяемый базовый адрес, а данные должны размещаться вокруг него на растоянии ±127 байт -- можно использовать mov byte ptr[ecx+23h],'$' (0C6412324h - 4 байта) или mov byte ptr[ecx-23h],'$' (0C641DD24h) 2) можно писать в порт, по большому счету порты это тоже ячейки памяти (адресация напрямую до 255 байт) mov al,'$'/out 23h,al (0B024h.0E623h - 4 байта) либо вариант через dx (адресация до 65535 байт) т.е mov dx,23/mov al,'$'/out dx,al (0BA2300h.0B024h.0EEh - 6 байт) 3) Со времен Intel-8086 объем памяти намного больше чем 256 байт, поэтому адресоваться можно, как минимум к слову т.е mov byte ptr [bx],'$' (хотя на самом деле здесь неявно присутствует префикс ds: поэтому адресация здесь определяется не 16, а 20 разрядами, то есть адресуемся в пределах 1048576 байт), да и косвенно обратиться в 16-битном режиме через cl/cx нельзя, а можна только через регистры bx, bp, di, si