Estou aqui com um "bloqueio mental" e gostaria que me ajudassem...Preciso de copiar o conteúdo do registo ch para o registo ax (tem de ser mesmo o registo de 16 bits pois pretendo fazer uma divisão),mas sei que não o posso fazer directamente pois não é possível copiar um registo de 8 bits para 16 bits e vice-versa...Como poderei fazer então?
Estou aqui com um "bloqueio mental" e gostaria que me ajudassem...Preciso de copiar o conteúdo do registo ch para o registo ax (tem de ser mesmo o registo de 16 bits pois pretendo fazer uma divisão),mas sei que não o posso fazer directamente pois não é possível copiar um registo de 8 bits para 16 bits e vice-versa...Como poderei fazer então?
copias o conteúdo do registo para memória e daí para o outro registo.
MadOnion
04-06-2007, 10:04
mov %ch, %ah #nao me lembro se é para o %ah ou %al
CBTW #convert byte do word, ficas com o resultado em %ax
Ou então usas a solução dada pelo Datwo.
De 16bits para 8bits penso que não resulta, mas verifica a documentação.
A linguagem assembly que usei acima é do GAS-GNU.
S.T.E.E.L.
04-06-2007, 10:14
Já não me lembro bem disso, mas penso que será assim:
mov ax,0 ;;;;;; ou xor ax,ax ,coloca o registo a 0, para não ficar lixo em ah
mov al, ch ;;;;;; al é a parte menos significativa de ax (ex: se ax for 0000 0011 - 0000->ah;0011->al)
Obrigada pelas respostas!Acabei por fazer como o SteelBoy19 disse...
Já não me lembro bem disso, mas penso que será assim:
mov ax,0 ;;;;;; ou xor ax,ax ,coloca o registo a 0, para não ficar lixo em ah
mov al, ch ;;;;;; al é a parte menos significativa de ax (ex: se ax for 0000 0011 - 0000->ah;0011->al)
ou em alternativa à primeira instrução:
xor ax, ax ;; coloca o registo a zeros
mais rápido ;)
cumprimentos.