Size: a a a

Ассемблер

2021 September 26

RB

Rustem B. in Ассемблер
всегда ли лучше использовать xor reg,reg вместо mov reg,0?
источник

RB

Rustem B. in Ассемблер
mov si, 0 
mov si, 0
mov si, 0
mov cx, 0
mov si, 0
mov cx, 0
mov si, 0
mov cx, 0
mov si, 0
mov cx, 0


вот могу ли я это всё заменить на xor reg,reg?
источник

GF

Georgy Firsov in Ассемблер
xor занимает меньше места (я про x86 по крайней мере)
Кроме того, он и выполняется немножко быстрее. А ещё вроде как производители процессоров делают специальные оптимизации для этого случая
источник

RB

Rustem B. in Ассемблер
ага, спасибо, уже заменил и проверил))
размер уменьшился на 12 байт
источник

RB

Rustem B. in Ассемблер
странно только почему 12, если у меня в коде таких строчек 10

а, туплю
источник

s

s54816 in Ассемблер
# cat foo.S
[bits 32]
mov eax,X
# nasm foo.S -DX=0xbaadf00d
# hexdump -C foo
00000000  b8 0d f0 ad ba                                    |.....|
00000005
Покажи, как именно оно у тебя не работает, как ругается.
источник

RB

Rustem B. in Ассемблер
вот именно, что он даже не ругается
источник

s

s54816 in Ассемблер
А как ты тогда узнал, что оно не работает?
источник

RB

Rustem B. in Ассемблер
код работал так же, как и работал до этого
источник

s

s54816 in Ассемблер
Так может проблема в коде? Запусти с -E, посмотри, что получается.
источник

RB

Rustem B. in Ассемблер
значения не меняются
источник

RB

Rustem B. in Ассемблер
$ tail LAB.ASM -n2
arr_res:
resw N
$ nasm -E LAB.ASM | tail -n2
arr_res:
resw 5
$ nasm -E LAB.ASM -DN=8 -UN | tail -n2
arr_res:
resw 5
источник

s

s54816 in Ассемблер
Но ведь твоя 5 откуда-то берётся. Где-то редефайнишь N.
источник

RB

Rustem B. in Ассемблер
в начале кода
источник

s

s54816 in Ассемблер
Так в чём тогда проблема? У тебя есть дефайн, ты перезаписываешь, оно перезаписывается. Странно было бы, если бы оно наоборот работало.
источник

RB

Rustem B. in Ассемблер
? оно не перезаписывается же у меня
источник

s

s54816 in Ассемблер
Ты только что сказал, что в начале кода ты перезаписываешь. Ты делаешь что-то типа:
%define N 5
resw N

И ты почему-то думаешь, что -u должна влиять на будущие определения N типа этого.  А она влияет только на встроенные и предыдущие.
источник

RB

Rustem B. in Ассемблер
так в доках NASM было написано, что это должно работать
источник

s

s54816 in Ассемблер
Где? Ты можешь nasm ${NASM_FLAGS} -uN -dN=12345, когда у тебя в NASM_FLAGS есть дефайн N, и ты не хочешь их менять. Ты можешь nasm -p defaults.inc -uN -dN=12345, когда у тебя есть %define N что-то в defaults.inc, ну и всё.
источник

RB

Rustem B. in Ассемблер
2.1.21
источник