Artigo Diretório
1. Variáveis e rótulos
1.1 identificador
Strings de símbolos alfanuméricos e especiais começando com letras e caracteres especiais (_, $,?, @)
1.2 Palavras reservadas
Identificador com finalidade específica, o usuário não pode alterar seu significado
1.3 Variáveis
1.3.1 Quatro atributos
- O deslocamento é a distância de bytes em relação ao endereço inicial do segmento (0)
- Os tipos incluem tipos básicos, como BYTE, WORD e DWORD, bem como tipos compostos, como struct
- O endereço do segmento é o endereço base fornecido quando o programa é carregado
- O valor é o
conteúdo real e pode ser alterado
1.3.2 Definição
-
Expressão DB / DW / DD [nome da variável]
例: msg DB "How are you?",0 ;//共13个字节,DB表示以byte类型(1个字节)定义变量 magic DB 50 dup('1','2','3') DB '1','2','3'; 共占53字节,并初始化为字符串"123123…";50表示容量;dup重复数据 DATA7 DB ? ; 占1字节;‘?’,表示该变量的值不确定,即:该变量所表示的内存单元中的内容是不确定的,或者说是,当表达式为问号时,变量所对应的内存区中并没有存入新的值,而只是预留出了相应的存储空间; num dw 1,2,3,4,5,6,7,8,9,10 ;共20字节 ;相当于C风格的 WORD num[10]={1,2,3,4,5,6,7,8,9,10};
1.4 Etiqueta
1.4.1 Propriedades
- O endereço do segmento refere - se ao endereço do segmento onde a instrução correspondente ao rótulo está localizada
- Endereço de deslocamento dentro do endereço de deslocamento do segmento
- Existem dois tipos: NEAR e FAR
- Tipo NEAR, o que significa que o rótulo é usado no segmento
- O tipo FAR significa que o rótulo pode ser usado entre os segmentos
1.4.2 Definição: adicione um identificador e dois pontos ":" antes do código de instrução;
Por exemplo: START: PUSH DS
2. Constante
2.1 pseudo-instrução EQU
PI EQU 31415926; semelhante à linguagem C # define PI 31415926
2.2 nome da pseudo-instrução = expressão
PIX = PI + 2 // O compilador substitui o nome pela expressão no estágio de pré-processamento
2.3 Pseudo-instrução ORG
O endereço inicial do programa especificado começa
em 0000H por padrão
ORG 2000H; as instruções do programa especificado são armazenadas no endereço 2000H
2.4 Sistema Numérico
Binário: 11101011B
Octal: 345Q
Decimal: 8097D, 8097
Hexadecimal: 1234H, 0EFDAH
2.5 Operações constantes
+ - * \
AND OR XOR NOT
SHL SHR //shift left \ shift right
EQ NE //equal \ not equal
LT LE //lower than \lower equal小于等于
GT GE //greater than \greater equal大于等于
Exemplo: MOV AL, ((11110000B AND 64) +5) GT 32 // Transfere o valor do resultado da comparação para AL
3. Indicação de tipo
3.1 Operador PTR (conversão de tipo forçada)
MOV BYTE PTR AGE, 20; // Indica o tipo de AGE
mov ax, bx; é atribuir o valor no registro BX para AX, uma vez que ambos são tipos de palavra, não há necessidade de adicionar "WORD"
mov ax, palavra ptr [bx]; é definir o endereço de memória para "o valor do registro BX" Os dados armazenados no local são atribuídos a machado. Como apenas um endereço de memória é fornecido, não sei se queremos atribuir ax a byte ou word, então precisamos especificá-lo com word!
PTR的作用域只在当前语句中
3.2 Operador ESTE (endereço atual)
COUNTW EQU THIS WORD
COUNTB DB 51,96,78,90
AGAINF EQU THIS FAR
AGAINN: MOV AL, 90
3.3 操作 符 COMPRIMENTO, TIPO, TAMANHO (TAMANHO = COMPRIMENTO * TIPO) , LARGURA
- COMPRIMENTO
- Nome da variável LENGTH
- Retire o comprimento da variável
- TIPO
- Nome da variável TYPE ou rótulo
- Obtenha o tipo de nome de variável ou rótulo (o número de bytes ocupados pela variável)
- TYPE 的 值 : BYTE: 1, WORD: 2, DWORD: 4 , PRÓXIMO: -1, FAR: -2
- TAMANHO
- Nome da variável SIZE
- Obtenha o tamanho da variável
- LARGURA
- Nome da variável WIDTH
- Obtenha a largura do campo de registro
3.4 ALTO, BAIXO
- MOV AL, HIGH 56761; pegue o byte alto da constante
- MOV AL, LOW 56761; pegue o byte inferior da constante
3.5SEG, OFFSET
-
SEG
- Nome ou rótulo da variável SEG
- Obtenha o endereço do segmento onde o nome da variável ou rótulo está localizado
-
DESLOCAMENTO
- Nome da variável OFFSET ou rótulo
- Obtenha o endereço de deslocamento no segmento onde o nome da variável ou rótulo está localizado
-
Por exemplo:
MOV AX, SEG COUNT // Remova o endereço do segmento do segmento COUNT e coloque-o no registro
AX MOV AX, OFFSET COUNT / Remova o endereço de deslocamento do segmento COUNT e coloque-o no registro AX
4. Definição de segmento
-
END indica o fim de todo o programa fonte de montagem e dá a posição de execução da primeira instrução ()
-
END START
DATA 1 SEGMENTS ;一段的开始 name1 DB 50DUP(?) DB 2,3,4,5 DATA 1 ENDS ;一段的结束 DATA 2 SEGMENTS ;一段的开始 name2 DB 50DUP(?) DATA 2 ENDS ;一段的结束 STACK SEGMENTS ;一段的开始 DB 5000 DUP(?) STACK ENDS ;一段的结束 CODE SEGMENT ;把段与段寄存器相关连 ASSUME CS:CODE, SS: STACK; DS:DATA1, ES:DATA2 START: MOV AX,DATA1 MOV DS,AX MOV AX,DATA2 MOV ES,AX MOV AL,name1 ;name1隐含使用DS MOV BL,name2 ;name2隐含使用ES。这里需要段超越。 …… CODE ENDS END START
5. Definição do processo
-
definição
Nome do processo PROC [FAR ou NEAR]; O padrão é NEAR
…… Nome do processo
RET
ENDP -
transferir
- Nome do procedimento CALL
Exemplo:
atraso de chamada; sub-rotina de atraso de chamada
...
atraso proc próximo; atraso definição de sub-rotina
mov bx, 200
lll: mov cx, 0
ll: loop ll
dec bx
jne lll
ret
atraso final
6. Tipo de estrutura
-
definição
-
结构类型名 STRUC [对齐类型Alignment][,NONUNIQUE] Field1 Type1 Exp1 Field2 Type2 Exp2 ...... FieldN TypeN ExpN 结构类型名 ENDS
FieldN: nome da variável, pode ser omitido, nenhum nome de variável é acessado através do deslocamento na estrutura
-
-
usar
- [Nome da variável] Nome do tipo de estrutura <[Lista de valores de campo]>
- A lista de valores de campo não é reinicializada para usar o valor padrão, separado por ","
7. Tipo de registro
- Nome do registro RECORD campo [, campo, ...]
- Nome do campo de campo: largura [= expressão de valor inicial] // largura: dígitos binários, padrão para 0 sem inicialização
- usar
-
[Nome da variável] Nome do tipo de estrutura <[Lista de valores de campo]>
-
Nome da variável. Nome do campo
WEATHER RECORD A:5=10, B:2=3, C:3 ;按位,不能超过16位。 TOR WEATHER <1, ,3> MOV AL, TOR.B
-
8. Macro
-
definição
宏名 MACRO 参数 ;用相应内容替换到调用位置 ...;宏定义体 ENDM ;结束定义
-
usar
- Parâmetro do nome da macro [, parâmetro]
- Tais como: NAME PARA, PARA2 ...
-
Cancelar macro
- PURGE macro name 1, macro name 2, ...;
9. Montagem condicional
例:SHOWCHAR MACRO X ;显示一个字符
IF X GE 35H
MOV AL, X
ELSE
MOV AL, '0'
ENDIF
MOV AH, 2
INT 21H
ENDM
10. Simplifique a definição do segmento
.8086
.MODEL SMALL ;SMALL采用小模式内存,一个代码段,一个数据段;
;TINY:都在一个段
;MEDIUM:多个代码段,一个数据段
DOSSEG ;采用DOS方法排列段
.DATA ;数据段
S1 DB 1,2,3
S2 DW 500
.STACK 100H ;堆栈段,指定大小为100,通常默认为1KB
.CODE ;代码段
MAIN PROC FAR
MOV AX,@DATA ; 数据段基址@DATA
MOV DS,AX
…
RET
MAIN ENDP
END MAIN
Diretiva de seção simplificada | Recursos | Comente |
---|---|---|
.CODE [nome da seção] | Crie um snippet de código | O nome da seção é opcional. Se o nome da seção não for fornecido, o nome da seção padrão será usado. Para modelos com vários segmentos de código, um nome de segmento deve ser especificado para cada segmento de código. |
.DADOS | Crie um segmento de dados | O nome da seção é: _DATA |
.DADOS? | Crie um segmento de dados sem variáveis de valor inicial | O nome da seção é: _BSS |
.FARDATA [段 名] | Estabelecer segmento de dados de chamada remota com valor inicial | O nome da seção pode ser especificado, se não for especificado, será nomeado após FAR_DATA. |
.FARDATA? [段 名] | Estabelecer segmento de dados de chamada remota sem valor inicial | O nome do segmento pode ser especificado, se não for especificado, ele será nomeado após FAR_BSS. |
.CONST | Crie um segmento de dados constante somente leitura | O nome da seção é: CONST |
.Tamanho da pilha] | Crie um segmento de pilha e especifique o tamanho do segmento de pilha | O nome da seção é: pilha. Se você não especificar o tamanho do segmento de pilha, o valor padrão é 1 KB |
11.Referência
1 http://blog.sina.com.cn/s/blog_84ee1fff0102xbeb.html
2 http://bdxnote.blog.163.com/blog/static/844423520096137403605/
3 https://www.cnblogs.com/galano/ p / 8721350.html
4 http://www.voidcn.com/article/p-pjmhoonz-yp.html