Escolar Documentos
Profissional Documentos
Cultura Documentos
A lista de Interromper:
H vrios livros que tenha esta informao mas mais para cima datar
Ralf Marrom Interrompe lista disponvel livremente em quatro partes em
ftp: //x2ftp.oulu.fi/pub/msdos/programmin onde XX a verso.
A famlia 80x86 era primeira comeada em 1981 com os 8086 e o novo membro
o Pentium que foi libertado treze anos mais tarde em 1994. So todos
para trs compatveis um com o outro mas cada novas geraes adicionou
caractersticas e mais velocidade que a lasca prvia. Hoje h muito
poucos computadores em uso que tm os 8088 e 8086 lascas neles como so
muito outdated e lento. H alguns 286's mas seus nmeros esto inclinando
como hoje software torna-se mais e mais exigir. Regular os 386, primeiro
CPU de 32 bits do Intel, agora est inclinando e parece que os 486 est
agora a entrada sistema plano.
O Representation de nmeros em ---------------------------- binrio--.
Pgina 1
O nibble quatro bits ou metade um byte. A nota que tem um valor mximo
de 15 (1111 = 15). Isto a base para o hexadecimal (baseia 16) sistema
de nmero que usado como longe mais fcil entender. Os nmeros de
Hexadecimal vo de 1 a F e so seguido por um h declarar que o esto em
hex. i.e. Fh = 15 decimal. Os nmeros de Hexadecimal que comeam com uma
letra so prefixed com uns 0 (zero).
1 BYTE 00000000 2 NIBBLES 8 BITS
AL DE AH 01100000 01110001
Pgina 2
BP e SP so registros de pilha e so usados quando lida com a pilha.
Sero cobertos quando conversamos sobre a pilha mais tarde.
Os registros de segmento so: CS, DS, ES, SS. Nos 386 + h tambm FS e
GS.
Compense registros so: BX, DI, SI, BP, SP, IP. Em 386 + mode1 protegido,
QUALQUER registro geral (nao um registro de segmento) pode ser usado como
um Compensar registro. (Exceto IP, que voc nao pode manipular
diretamente).
O -------------------------------------- DE PILHA--.
Isto uma rea de memria que como uma pilha de pratos. O ltimo pe
em ser o primeiro que tomam fora. Isto s vezes referido a como Dura Em
Primeiro Fora (LOFO) ou Primeiro Em Primeiro para fora (LIFO). Se outro
pedao de dados posto na pilha cresce para baixo.
Como pode ver a pilha comea num endereo alto e cresce para baixo.
Assegura-se que voc nao pe dados demais na pilha nem vai ir overflow.
UMA APRESENTAO A -------------------------------------- DE INSTRUES
DE ASSEMBLIA--.
H muitas instrues na assemblia mas h s aproximadamente vinte que
tm que saber e usaro muito freqentemente. A maioria de instrues so
compostas de trs carteres e tem um operand ento uma vrgula ento
outro operand. Por exemplo por uns dados num registro voc usa a
instruo de MOV.
Pgina 3
o machado de mov, 10; pem 10 em bx de mov de machado, 20; pem 20 em cx
de mov de bx, 30; pem 30 em dx de mov de cx, 40; pem 40 em dx
O aviso que em alguma coisa de montador depois que um; (semicolon)
ignorado. Isto muito til para comentar seu cdigo.
O EMPURRO E ESTOURO: DUAS INSTRUES USAR O
-------------------------------------- DE PILHA--.
Sabe sobre a pilha mas como nao por dados num para fora de ele. H duas
instrues simples que necessita saber: empurro e estouro. Eis a sintaxe
para seu uso:
INT chama um DOS ou funo de BIOS que so sub-rotinas fazer coisas que
ns bastante nao escreveria uma funo para e.g. muda video modo, abre um
arquivo etc.
A sintaxe: INT interrompe nmero
Pgina 4
Por exemplo: 21h de int; Chamados DOS 10h de int de servio; Chama o BIOS
Video interromper
A maioria de interromper tem mais de uma funo, este meio que voc tem
que passar um nmero funo que voc quer. Isto normalmente posto em
AH. Imprimir uma mensagem na tela todo que voc necessita fazer isto:
o ah de mov, 9; sub-rotina numera 9 21h de int; chama o interrompe
Mas primeiro tem que especificar o que imprimir. Esta funo necessita
DS: DX ser um pointer distante aonde a barbante . A barbante tem que ser
terminada com um sinal de dlar ($). Isto seria fcil se DS podia ser
manipulado diretamente, ficar redondo este temos que usar MACHADO.
A marca de pergunta (?) no meio de fim que os dados nao iniciado i.e.
no tem nenhum valor em comear com. Isso podia como facilmente escrito
como:
O db Number1 0 dw Number2 1
Desta vez Number1 igual a 0 e Number2 igual a 1 quando programa
cargas. Seu programa tambm ser trs bytes mais longo. Se declara um
varivel como uma palavra voc nao pode mover o valor deste varivel num
registro de 8 bits e voc nao pode declarar um varivel como um byte e
move o valor num registro de 16 bits. Por exemplo:
O alistamento 1: 1STPROG.ASM
; Isto um programa simples que exibe "Oi Mundo!" no; tela.
O Montador de Turbo:
[/t de arquivo de tlink de arquivo.asm de tasm]
A86:
o arquivo.asm a86
Isto compilar seu programa a um. arquivo de COM. Nao importa o que o
modelo de memria .
ADICIONE operand1,operand2
Isto adiciona operand2 a operand1. A resposta armazenada em operand1.
Dados imediatos nao podem ser usados como operand1 mas pode ser usado
como operand2.
SUB Subtrae um nmero de outro
A sintaxe: operand1,operand2 de SUB
Isto subtrae operand2 de operand1. Dados imediatos nao podem ser usados
como operand1 mas pode ser usado como operand2.
Pgina 6
A sintaxe: registro de MUL ou registro varivel de IMUL ou varivel
Podemos repor todo isto com somente uma linha. Isto faz o cdigo mais
fcil ler e ele mais fcil lembrar de.
Isto porque todos os dados no segmento tem o mesmo valor de SEG. Por
que isto em DS poupa-nos recarregar este cada tempo que ns queremos usar
outra coisa no mesmo segmento.
-------------------------------------- DE ENTRADA DE TECLADO--.
Estamos indo usar interrompemos 16h, 00h de funo ler o teclado. Isto
recebe uma tecla da memria de teclado intermediria. Se no h um,
espera at que h. Retorna o ESQUADRINHA cdigo em AH e a traduo de
ASCII em AL.
o ah de xor, ah; 00h de funo - recebe 16h de int de carter; interrompe
16h
Todo que ns necessitamos preocupar-se com para agora est o valor de
ascii que est em AL.
A nota: XOR executa um Boolean Exclusivo OU. Comummente usado para
apagar um registro ou varivel.
A IMPRESSO UM -------------------------------------- DE CARTER--.
Pgina 7
O problema que temos a tecla que foi apertada em ah. Como exibimo-lo?
Ns nao podemos usar 9h de funo porque para que necessitamos j ter
definido a barbante que tem que acabar com um sinal de dlar. Isto o
que ns fazemos contrriamente:
a etiqueta de jmp
Todo que isto faz mover etiqueta especificado e comea executar o
cdigo a. Por exemplo:
Cada instruo toma para cima uma certa quantia de espao de cdigo.
Receber um aviso se tenta e pula mais de 127 bytes em qualquer um
direo do compilador. Pode resolver isto por mudar uma sequncia como
isto:
O machado de cmp, 10; MACHADO 10? o je feito; sim, deixa acabamento
a algo como isto:
Pgina 8
O machado de cmp, 10; MACHADO 10? o notdone de jne; no no jmp
feito; ns agora estamos feitos notdone:
Isto resolve o problema mas pode querer pensar sobre reorganizar seu
cdigo ou procedimentos que usam se isto acontece freqentemente.
Agora estamos indo olhar num programa que demonstra entrada, produo e
fluncia de controle.
O alistamento 2: PROGFLOW.ASM
; um programa demonstrar fluncia de programa e entrada/produo. modelo
minsculo. 100h de org de cdigo comea:
PROC AProcedure. . ; Algum cdigo fazer algo. RET; se isto no est aqui
ento seu AProcedure DE ENDP de choque de vontade de computador
Pgina 9
chame AProcedure
O alistamento 3: SIMPPROC.ASM
; Isto um programa simples demonstrar procedimentos. Devia; impresso
Oi Mundo! no tela quando correu.
. modelo minsculo. 100h de org de cdigo
o fim Comea
O alistamento 4: PROC1.ASM
o fim Comea
A passagem por -------------------------------------- de Pilha--.
Isto o mtodo flexvel bem poderoso de parmetros de passagem o
problema que mais complicado.
O alistamento 6: PROC3.ASM
; Este um procedimento imprimir um bloco na tela que usa o; pilha passar
parmetros (posio de cursor de onde imprimir; e cor).
. modelo minsculo. 100h de org de cdigo Comea: dh de mov, 4; fila
imprimir barbante em dl de mov, 5; coluna imprimir barbante em al de mov,
254; valor de ascii de bloco exibir bl de mov, 4; cor exibir carter
Minsculo
Este meio que h s um segmento para tanto cdigo como dados. Este tipo
de programa pode ser um. arquivo de COM.
Pequeno
Este meio que por omisso todo cdigo lugar em um segmento e todos
dados declarado no segmento de dados tambm colocado em um segmento.
Este meio que todos procedimentos e variables esto endereados como
PRXIMO por apontar em compensars s.
Compacto
Este meio que por omisso todos elementos de cdigo so colocados em um
segmento mas cada elemento de dados pode ser colocado no prprio segmento
fsico. Este meio que elementos de dados so endereados por apontar em
ambos no segmento e compensar endereos. Os elementos de cdigo
(procedimentos) esto PRXIMO e variables esto DISTANTE.
Mdio
Grande
Este meio que tanto procedimentos como variables so DISTANTE. Tem que
apontar em ambos o segmento e compensar endereos.
Plano
Pgina 12
Isto nao usado muito como para 32 espao de memria de unsegmented de
bit. Para este necessita um DOS extender. Isto o que voc teria que
usar se estivessem escrevendo um programa a interface com um C/C + +
programa que usou um DOS extender tal como DOS4GW ou PharLap.
O Macros so muito til para fazer algo que feito freqentemente mas
pelo qual um procedimento nao poder ser uso. O Macros so substitudos
quando o programa compilado ao cdigo que eles contm.
endm
A nota que os registros so estourados na ordem inversa a eles foram
empurrados. Usar um macro em voc program-lo acaba de usar o nome do
macro como uma instruo costumeira:
Este exemplo mostra como pode usar um macro poupar bater em. Este macro
simplesmente imprime para fora uma mensagem tela.
Os nico problemas com macros que se voc overuse que os leva a ele
programar aumenta e maior e que tem problemas com mltipla definio de
etiquetas e variables. O meio correto resolver este problema usar o
directive LOCAL para declarar nomes macros interno.
A sintaxe: nome de LOCAL
Pgina 13
O nome_de_par1,par2,par3 de macro de Macro;; comandos vo aqui; endm
Os arquivos podem ser abertos, lem e escrito a. DOS tem alguns meios de
fazer que isto que nos poupa o problema de escrito o prprias rotinas.
Sim, mais interrompe. Eis uma lista de funes teis de interromper 21h
aquele lida com arquivos.
A nota: Bits so numerados de direito deixar.
Pgina 14
A PRODUO: CF = 0 funo MACHADO bem de sucedido = CF destrudo = 1
funo MACHADO nao bem de sucedido = cdigo de erro - arquivo 06h cabo
nao aberto de unauthorised.
Importante: Nao chama esta funo com um zero cabo porque isso fechar a
entrada normal (o teclado) e voc nao ser capaz de entrar alguma coisa.
3Fh de funo: l arquivo/artifcio
Esta funo tambm pode ser usada para receber entrada do teclado. Use um
cabo de 0, e para leitura depois que o primeiro retorno de carruagem, ou
vez uma um nmero especificado de carteres foi lido. Isto um bom e
mtodo fcil de usar s deixar o operador entrar uma certa quantia de
carteres.
O alistamento 7: READFILE.ASM
O bloco de DTA
Compense Tamanho em bytes Querer dizer
0 21 Reservaram 21 1 Arquivo atribui 22 2 Tempo de durar modificou 24 2
Data durar modificou 26 4 Tamanho de arquivo (em bytes) 30 13 nome de
Arquivo (ASCIIZ)
Um exemplo de verificar se arquivo existe:
Arquive "C:\file.txt",0 DE DB; nome de arquivo que ns queremos
Pgina 16
o dx de mov, COMPENSAR Arquivo; endereo de cx,3Fh de mov de filename;
3Fh de mscara de arquivo - qualquer ah,4Eh de mov de arquivo; 4Eh de
funo - acha primeiro 21h de int de arquivo; chamado DOS NoFile de jc de
servio
O alistamento 8: CRIA.ASM
; Este programa de exemplo cria um arquivo e ento escreve a ele.
O equ de CR 13 equ de LF 10
DB de StartMessage "Este programa cria um arquivo NOVO.TXT chamado" DB,"
Pgina 17
na rodada de C. $" CR DE DB de EndMessage, LF," Arquivo cria OK, olha em
arquivo a" DB," est seguro. $"
O equ de CR 13 equ de LF 10
Arquive "C:\new.txt",0 de db
jmp EndOk
O EndOk: dx de mov, COMPENSAR Anularam; Endit de jmp de mensagem de
exposio
O ErrorDeleting: dx de mov, COMPENSAR ErrDel; Endit de jmp de mensagem de
exposio
O FileDontExist: dx de mov, COMPENSAR NoFile; mensagem de exposio
o fim
A sintaxe:
o movsb; move movsw de byte; move movsd de palavra; move palavra dupla
CMPS* barbante de Comparao: byte de comparaes, palavra ou palavra
dupla em DS: SI a ES: DI
A sintaxe:
Pgina 19
A nota: Esta instruo normalmente usada com o prefix de REP.
rep StringInstruction
STOS* Move byte, palavra ou palavra dupla de AL, MACHADO ou EAX a ES: DI
A sintaxe:
o stosb; move AL em ES: stosw de DI; move MACHADO em ES: stosd de DI;
move EAX em ES: DI
DIRIGIU* Move byte, palavra ou palavra dupla de DS: SI a AL, PARA MACHADO
ou EAX
A sintaxe:
o lodsb; move ES: DI em lodsw de AL; move ES: DI em lodsd de MACHADO;
move ES: DI em EAX
Pgina 20
o si de mov, COMPENSAR Diff1; fazem ds: ponta de si a di de mov Diff1,
COMPENSAR Diff2; faz es: ponta de di a cx de mov Diff2, 39; comprimento
de cmpsb de repz de barbantes; Not_Equal de jnz de barbantes de
comparao; pulo se eles no so o mesmo
jmp Next_Operation
Not_Equal: ah de mov, 9; funcionam 9 - dx de mov de barbante de
exposio, COMPENSAR Message5; ds: pontas de dx a 21h de int de mensagem;
chamado dos funo
Next_Operation: di de mov, COMPENSAR SearchString; fazem es: ponta de di
a cx de mov de barbante, 36; comprimento de al de mov de barbante,' H';
carter procurar scasb de repne; acha primeiro Not_Found de jnz de partida
jmp Lodsb_Example
. dados
O equ de CR 13 equ de LF 10
Pgina 21
NewLine db CR,LF,"$"
o fim
COMO SABER O DOS -------------------------------------- DE VERSO--.
ah,33h de mov; 33h de funo - real DOS al,06h de mov de verso; 21h de
int 06h de subfunction; chamado interrompe 21h
A nota: fazer estas linhas compilar em A86 que voc necessita por
vrgulas (,) em entre os registros.
Unsigned de SHL mltiplo por dois Unsigned de SHR divide por dois SAR
Assinou divide por dois SAL mesmo como SHL
A sintaxe para todos quatro a mesmo.
A Volta que usa um melhor meio de fazer uma volta JMP ento usando.
Coloca a quantia de vezes que voc quer ele a volta no registro de CX e
cada tempo alcana a declarao de volta ele (CX-1 DE CX de decrements) e
ento faz um pulo curto etiqueta indicado. Um meio curto de pulo que
pode s 128 bytes antes de ou 127 bytes depois da instruo de VOLTA.
Qual pensa mais fcil entender? O DEC/JNZ que usa mais rpido em
486's e acima e est til como voc nao tem que usar CX.
Isto trabalha porque JNZ pular se a zero bandeira nao foi posta. Por CX
a 0 por esta bandeira.
COMO USAR UM -------------------------------------- DE DEBUGGER--.
o fim comea
Debugger de Turbo ento carrega. Pode ver as instrues que compem seus
programas, por exemplo as primeiras poucas linhas deste programa
mostrada como:
O prximo programa demonstra como escrever ao tela usar stosw de rep por
o escrito em memria videa.
o fim
Pgina 25
. modelo pequeno. pilha. machado de mov de cdigo, @ds de mov de dados,
machado
. dados
Ax,1A00h de mov; Pede info video para 10h de int de VGA; Recebe al,1Ah de
cmp de Cdigo de Combinao de Exposio; VGA ou presente de MCGA ?
Mode_13h_OK de je; 13h de modo apoiado stc; 13h de modo nao apoiado
CF = 1
Mode_13h_OK: ret
Check_Mode_13h ENDP
o fim
Uso justo que isto verificar se 13h de modo apoiado no comeo de seu
programa assegura-se que pode entrar naquele modo.
ax,13h de mov; 10h fixo de int 13h de modo; servio de BIOS de chamado
Vez uma que ns estamos em 13h de modo e acabou o que ns estamos fazendo
necessitamos a ns necessita p-lo ao modo video que estava em
previamente. Isto feito em duas etapas. Primeiramente necessitamos
poupar o modo video e ento reset ele quele modo.
VideoMode db? .... ah,0Fh de mov; 0Fh de funo - fica atual 10h de int
de modo; Bios VideoMode video de mov de chamado de servio, al; poupam
modo atual
; cdigo de programa aqui
Agora que podemos faze-nos parte de 13h de modo deixa faz algo.
Primeiramente deixa pe algum pixels na tela.
A nota: Esta funo executa exclusivo OU (XOR) com o novo valor de cor e
o contexto atual do pixel de bit 7 de AL posto.
o fim comea
ALGUM -------------------------------------- DE OPTIMIZATIONS--.
Qual devemos usar? Quando estamos indo escrever pixels tela que ns
necessitamos fazer ento to rpido quanto possvel.
Pgina 28