Gente ajuda em Assembly, Fiz mas da ERRO NA CPU NTLDR

1)elaborar um programa para ler 4 caracteres sem exibilos e exibir em seu lugar o caracter “*”(2a). comparar

com uma senha e exibir na tabela ‘ok’ se os caracteres forem iguais e ‘nor’ se forem diferentes.

[code]

  • a 970
    mov [950],4
    mov [951],3
    mov [952],2
    mov [953],1

  • a 1000
    mov SI,900
    mov BP,950
    mov dh,2A
    mov ah,07
    int 21
    mov[900],AL
    int 21
    mov[901],AL
    int 21
    mov[902],AL
    int 21
    mov[903],AL
    mov cx,04
    mov AX,[BP]
    cmp[SI],AX
    INC SI
    INC BP
    JNZ 1080
    jmp 1021
    mov ah,09
    mov dx,1050 // db ‘OK$’

==

a 1050
db 'OK$'
int 21
int 3

a 1080
mov ah,09
mov dx,1090

a 1090
db 'NOK$'
int 21
int 3[/code]

Gente, podem me dar uma luz ?
Entanglement :stuck_out_tongue:

Você está rodando seus programas no Windows de 32 bits para que o programa Debug (que é de 16 bits) execute esse código velho do DOS (em 16 bits), é isso?

[quote=entanglement]Você está rodando seus programas no Windows de 32 bits para que o programa Debug (que é de 16 bits) execute esse código velho do DOS (em 16 bits), é isso?

[/quote]

Isso.
Exatamente;
Eu rodo ele na virtual machine da oracle no win XP;

Pelo menos você consegue usar o comando T para rodar seu programa passo-a-passo para ver que coisa esquisita ele está fazendo, não?

Vou tentar;

Vou tentar;
[/quote]

Então rapaz, tentei rodar, mas nao funcionou por causa dos int 21, e quando rodei g = 1000 , ele fechou o programa e voltou pro CMD.
Ou seja, as vezes ele funciona, as vezes nao. As vezes da erro, outras não…
Não entendo porque tenho que aprender uma linguagem que , pelo menos ao meu ver, nao tem consistência…

A propósito, lembra que lhe passei links sobre como criar programas em Assembly que rodam em Win32 em vez do DOS, que é o que você está usando?
Eu acho terrível ter de lidar com essa documentação antiga do INT21 e outras coisas mal-comportadas.
Você precisa ler a documentação com cuidado e ver todos os registradores (é por isso que eu falei para rodar passo-a-passo). Note que cada registrador é importante quando você usa INT21, e não se esqueça que, depois do INT21 rodar, você pode supor que todos os registradores ficam estragados, portanto você precisa de algumas instruções (como PUSH e POP) para poder guardar os registradores que ficaram estragados.

[quote=entanglement]A propósito, lembra que lhe passei links sobre como criar programas em Assembly que rodam em Win32 em vez do DOS, que é o que você está usando?
Eu acho terrível ter de lidar com essa documentação antiga do INT21 e outras coisas mal-comportadas.
Você precisa ler a documentação com cuidado e ver todos os registradores (é por isso que eu falei para rodar passo-a-passo). Note que cada registrador é importante quando você usa INT21, e não se esqueça que, depois do INT21 rodar, você pode supor que todos os registradores ficam estragados, portanto você precisa de algumas instruções (como PUSH e POP) para poder guardar os registradores que ficaram estragados. [/quote]

OK, vou mostrar esse seu post pro meu professor, e ver o que ele diz.
Mas entaglement, vc pode me passar esses links , por favor?? plx plx

http://www.guj.com.br/java/277456-assembler-tasm

(Desculpe, não era com você e sim com outro cara).

Uma coisa que é indispensável para você que quer aprender Assembly é usar um assembler, e também a comentar muito seu código. Do jeito que você mostrou o seu código, não fiz nenhum esforço para tentar entendê-lo . Se eu tiver algum tempo, vou dar um exemplo de como eu escreveria o código da leitura da senha (isso se eu conseguir achar algo que gere um .com, pelo jeito só o tasm e o tlink mesmo.)

Ok, Hoje vai ter aula de assembly. Vou comentar esse código de novo, ele estava assim, mas , por algum motivo eu tirei os comentários.

Entanglement. Estou Comentando o código.
Mas enquanto isso, deixa eu te perguntar.

Quando eu usar o db ‘asdnakdn askdn $’ , ele sempre deve ir no final do código ?

Usei ele uma vez no meio do código, por exemplo, na linha 120, e ele Misturou o código que veio em seguida…

[code]

====
Segue o código correto , as vezes alguém pode precisar :

mov cx,4
mov bx,200

// O código entre // , le o teclado sem mostrar?
v1 : mov ah,07
int 21
//
mov [bx],AL
inc Bx

//O código abaixo escreve * na tela
mov DL,2A
mov AH,02
int 21

loop v1

;
mov cx,4
mov si,200
mov di,210 // A senha correta esta na memória , usar comando debug -E 210 ‘1234’

v2 : mov bl,[SI]
CMP[DI],BL
jnz erro
inc SI
inc DI
loop v2

mov dx,220 // Usar comando -E220 'OK$'
mov ah,02
int 21
jmp FIM

erro : mov dx,230 //Usar comando -E230 'NOT OK$'
mov ah,09
int 21

FIM: int 3[/code]

/////

Dúvida:
Entanglement, O professor poderia ter usado db, ao invés de -E no debug ?

////

Segue o mesmo código sem comentários e com uma modificação no final :

mov cx,4
mov bx,200

v1: mov ah,07
int 21
mov [BX],AL
INC BX
mov dl,2A
mov ah,02
int 21
loop v1

mov cx,4
mo v si,200
mov di,210

v2: mov bl,[SI]
CMP [DI],BL
JNZ erro
INC SI
INC DI
loop v2
mov dx,220
JMP fim

erro: mov dx,230
fim mov ah,09
int 21
int 3

//
e 210 '1234'
e 220 'OK$'
e 230 'NOK$'