Execução de Programas Partes de um programa: ‣ Dados ‣ Código (instruções) Um programa necessita estar carregado em memória RAM para ser executado, sendo assim, cada variável e cada instrução do programa está localizado em algum endereço na memória. O conteúdo da memória onde estão localizados os dados, está mudando constantemente e o local onde estão armazenados os código, permanece sempre com o mesmo conteúdo. A execução do programa é feita instrução por instrução até que a instrução de finalização de programa seja executada.
Utilizando o DEBUG r , mostra o conteúdo dos registradores ou altera o conteúdo de um registrador. -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B52 ES=0B52 SS=0B52 CS=0B52 IP=0100 NV UP EI PL NZ NA PO NC 0B52:0100 7312 JNB 0114 -r ax AX 0000 :8 -r bx BX 0000 :2 AX=0008 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
Utilizando o DEBUG e - editar um endereço de memória -e 100 0B52:0101 12.d8 -r AX=0008 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B52 ES=0B52 SS=0B52 CS=0B52 IP=0100 NV UP EI PL NZ NA PO NC 0B52:0100 01D8 ADD AX,BX
Utilizando o DEBUG t – Execução passo a passo da instrução apontada por IP. -r AX=0008 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B52 ES=0B52 SS=0B52 CS=0B52 IP=0100 NV UP EI PL NZ NA PO NC 0B52:0100 01D8 ADD AX,BX -t AX=000A BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B52 ES=0B52 SS=0B52 CS=0B52 IP=0102 NV UP EI PL NZ NA PE NC 0B52:0102 2E CS: 0B52:0103 A1AC95 MOV AX,[95AC] CS:95AC=0000
Utilizando o Debug Operação de Soma e Subtração com assembly. ADD AX, BX SUB AX, BX O resultado da Soma do conteúdo de dois registradores é armazenado no primeiro registrador, no exemplo acima ficaria AX = AX + BX O resultado da subtração do conteúdo de dois registradores é armazenado no primeiro registrador, no exemplo acima ficaria AX = AX - BX
Utilizando o DEBUG A operação de Multiplicação utiliza sempre o registrador AX. Mul BX A instrução acima considera que o registrador bx será multiplicado por AX A multiplicação de dois números de 16 bits, poderá gerar um número de 32 bits, desta forma, o resultado da multiplicação é guardado em dois registradores no formato DX:AX, onde parte mais significativa do resultado é armazenado em DX e parte menos significativa é armazenado em AX Exemplo: AX = 7c4b BX = 0100 AX * BX = 7C4B00 RESULTADO FINAL – DX=007C e AX=4B00
Utilizando o DEBUG -r ax AX 0000 :7c4b -r bx BX 0000 :0100 -r AX=7C4B BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B52 ES=0B52 SS=0B52 CS=0B52 IP=0100 NV UP EI PL NZ NA PO NC 0B52:0100 BB0200 MOV BX,0002 -e 100 0B52:0100 BB.f7 -e 101 0B52:0101 02.e3 0B52:0100 F7E3 MUL BX -t AX=4B00 BX=0100 CX=0000 DX=007C SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B52 ES=0B52 SS=0B52 CS=0B52 IP=0102 OV UP EI PL NZ NA PE CY 0B52:0102 00B80300 ADD [BX+SI+0003],BH DS:0103=B8
Utilizando o DEBUG A operação de divisão utiliza um número de 32 bits, desta forma, considera que este número está armazenado no par de registrador DX:AX, onde o DX armazena a parte mais significativa e AX a parte menos significativa Div bx A instrução acima assume que o número contido no par DX:AX será dividido pelo conteúdo do registrado BX. A parte inteira da divisão será armazenado no registrador AX e o resto da divisão será armazenada no registrador DX.