Artikelverzeichnis
1. Variablen und Beschriftungen
1.1 Kennung
Alphanumerische und spezielle Symbolzeichenfolgen, beginnend mit Buchstaben und Sonderzeichen (_, $,?, @)
1.2 Reservierte Wörter
Kennung mit einem bestimmten Zweck kann der Benutzer seine Bedeutung nicht ändern
1.3 Variablen
1.3.1 Vier Attribute
- Der Offset ist der Byteabstand relativ zur Segmentstartadresse (0).
- Zu den Typen gehören Basistypen wie BYTE, WORD und DWORD sowie zusammengesetzte Typen wie struct
- Die Segmentadresse ist die Basisadresse, die beim Laden des Programms angegeben wird
- Der Wert ist der tatsächliche
Inhalt und kann geändert werden
1.3.2 Definition
-
[Variablenname] DB / DW / DD-Ausdruck
例: 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 Etikett
1.4.1 Eigenschaften
- Die Segmentadresse bezieht sich auf die Segmentadresse des Segments, in dem sich der dem Etikett entsprechende Befehl befindet
- Versatzadresse innerhalb der Segmentversatzadresse
- Es gibt zwei Arten: NEAR und FAR
- NEAR-Typ, dh das Label wird im Segment verwendet
- FAR-Typ bedeutet, dass das Label zwischen Segmenten verwendet werden kann
1.4.2 Definition: Fügen Sie vor dem Anweisungscode einen Bezeichner und einen Doppelpunkt ":" ein.
Zum Beispiel: START: PUSH DS
2. Konstante
2.1 Pseudoanweisung EQU
PI EQU 31415926; ähnlich der C-Sprache #define PI 31415926
2.2 Pseudobefehlsname = Ausdruck
PIX = PI + 2 // Der Compiler ersetzt in der Vorverarbeitungsphase den Namen durch den Ausdruck
2.3 Pseudoanweisungs-ORG
Die Startadresse des angegebenen Programms beginnt
standardmäßig bei 0000H
ORG 2000H, die angegebenen Programmanweisungen werden ab der Adresse 2000H gespeichert
2.4 Zahlensystem
Binär: 11101011B
Oktal: 345Q
Dezimal: 8097D, 8097
Hexadezimal: 1234H, 0EFDAH
2.5 Konstante Operationen
+ - * \
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大于等于
Beispiel: MOV AL, ((11110000B UND 64) +5) GT 32 // Übertragen Sie den Wert des Vergleichsergebnisses an AL
3. Typanzeige
3.1 Operator PTR (erzwungene Typkonvertierung)
MOV BYTE PTR AGE, 20; // Gibt den Typ des AGE an
mov ax, bx; soll AX den Wert im BX-Register zuweisen, da beide Worttypen sind, muss nicht "WORT" hinzugefügt werden.
mov ax, Wort ptr [bx]; soll die Speicheradresse auf "den Wert des BX-Registers" setzen. Den dort gespeicherten Daten wird ax zugewiesen. Da nur eine Speicheradresse angegeben ist, weiß ich nicht, ob wir Byte oder Wort Axt zuweisen möchten, daher müssen wir sie mit Wort angeben!
PTR的作用域只在当前语句中
3.2 Betreiber DIESE (aktuelle Adresse)
COUNTW EQU THIS WORD
COUNTB DB 51,96,78,90
AGAINF EQU THIS FAR
AGAINN: MOV AL, 90
3.3 操作 符 LÄNGE, TYP, GRÖSSE (GRÖSSE = LÄNGE * TYP) , BREITE
- LÄNGE
- LÄNGE Variablenname
- Nehmen Sie die Länge der Variablen heraus
- ART
- Name oder Bezeichnung der TYPE-Variablen
- Ermitteln Sie den Typ des Variablennamens oder der Bezeichnung (die Anzahl der von der Variablen belegten Bytes).
- TYP : 值 : BYTE: 1, WORD: 2, DWORD: 4 , NEAR: -1, FAR: -2
- GRÖSSE
- SIZE Variablenname
- Ermitteln Sie die Größe der Variablen
- BREITE
- Name der WIDTH-Variablen
- Ermitteln Sie die Breite des Datensatzfelds
3.4HOH, NIEDRIG
- MOV AL, HIGH 56761, nimm das High-Byte der Konstante
- MOV AL, LOW 56761; nimm das niedrige Byte der Konstante
3.5SEG, OFFSET
-
SEG
- Name oder Bezeichnung der SEG-Variablen
- Nehmen Sie die Segmentadresse des Segments heraus, in dem sich der Variablenname oder die Bezeichnung befindet
-
OFFSET
- Name oder Bezeichnung der OFFSET-Variablen
- Nehmen Sie die Versatzadresse in dem Segment heraus, in dem sich der Variablenname oder die Bezeichnung befindet
-
Zum Beispiel:
MOV AX, SEG COUNT // Entfernen Sie die Segmentadresse des COUNT-Segments und legen Sie sie in das AX-Register.
MOV AX, OFFSET COUNT / Entfernen Sie die Offset-Adresse des COUNT-Segments und legen Sie sie in das AX-Register
4. Segmentdefinition
-
END gibt das Ende des gesamten Assembly-Quellprogramms an und gibt die Ausführungsposition des ersten Befehls an ()
-
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. Prozessdefinition
-
Definition
Prozessname PROC [FAR oder NEAR]; Der Standardwert ist NEAR
……
RET-
Prozessname ENDP -
Transfer
- Name der CALL-Prozedur
Beispiel:
Anrufverzögerung; Unterprogramm für Anrufverzögerung
...
Verzögerung in der Nähe; Definition des Unterprogramms für Verzögerung
mov bx, 200
lll: mov cx, 0
ll: Schleife ll
dec bx
jne lll
ret
delay endp
6. Strukturtyp
-
Definition
-
结构类型名 STRUC [对齐类型Alignment][,NONUNIQUE] Field1 Type1 Exp1 Field2 Type2 Exp2 ...... FieldN TypeN ExpN 结构类型名 ENDS
FeldN: Variablenname, kann weggelassen werden, über den Offset in der Struktur wird auf keinen Variablennamen zugegriffen
-
-
verwenden
- [Variablenname] Name des Strukturtyps <[Feldwertliste]>
- Die Feldwertliste wird nicht neu initialisiert, um den durch "," getrennten Standardwert zu verwenden.
7. Datensatztyp
- Datensatzname RECORD-Feld [, Feld,…]
- Feld Feldname: width [= Anfangswertausdruck] // width: Binärziffern, standardmäßig 0 ohne Initialisierung
- verwenden
-
[Variablenname] Name des Strukturtyps <[Feldwertliste]>
-
Variablenname. Feldname
WEATHER RECORD A:5=10, B:2=3, C:3 ;按位,不能超过16位。 TOR WEATHER <1, ,3> MOV AL, TOR.B
-
8. Makro
-
Definition
宏名 MACRO 参数 ;用相应内容替换到调用位置 ...;宏定义体 ENDM ;结束定义
-
verwenden
- Makroname Parameter [, Parameter]
- Wie zum Beispiel: NAME PARA, PARA2 ...
-
Makro abbrechen
- PURGE Makroname 1, Makroname 2, ...;
9. Bedingte Montage
例:SHOWCHAR MACRO X ;显示一个字符
IF X GE 35H
MOV AL, X
ELSE
MOV AL, '0'
ENDIF
MOV AH, 2
INT 21H
ENDM
10. Vereinfachen Sie die Segmentdefinition
.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
Vereinfachte Abschnittsrichtlinie | Eigenschaften | Kommentar |
---|---|---|
.CODE [Abschnittsname] | Erstellen Sie ein Code-Snippet | Der Abschnittsname ist optional. Wenn der Abschnittsname nicht angegeben wird, wird der Standardabschnittsname verwendet. Bei Modellen mit mehreren Codesegmenten sollte für jedes Codesegment ein Segmentname angegeben werden. |
.DATEN | Erstellen Sie ein Datensegment | Der Abschnittsname lautet: _DATA |
.DATEN? | Erstellen Sie ein Datensegment ohne Anfangswertvariablen | Der Abschnittsname lautet: _BSS |
.FARDATA [段 名] | Richten Sie ein Fernanrufdatensegment mit dem Anfangswert ein | Der Abschnittsname kann angegeben werden. Wenn er nicht angegeben wird, wird er nach FAR_DATA benannt. |
.FARDATA? [段 名] | Richten Sie ein Fernanrufdatensegment ohne Anfangswert ein | Der Segmentname kann angegeben werden. Wenn er nicht angegeben wird, wird er nach FAR_BSS benannt. |
.KONST | Erstellen Sie ein schreibgeschütztes konstantes Datensegment | Der Abschnittsname lautet: CONST |
.Stapelgrösse] | Erstellen Sie ein Stapelsegment und geben Sie die Stapelsegmentgröße an | Der Abschnittsname lautet: stack. Wenn Sie die Stapelsegmentgröße nicht angeben, beträgt der Standardwert 1 KB |
11. Referenz
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