1つの物理アドレス
- アドレス=物理セグメントアドレス(SA)* 16の+オフセットアドレス(EA)を使用して、アドレス加算器が合成されます。
- セグメント・アドレス0プラスワン残しアドレスセグメント・ベース・アドレス×16 == == ==セグメントアドレス。
- ベースアドレスが16の倍数である必要があり、範囲をアドレスオフセットアドレスは0〜FFFFH、64キロバイトのアドレッシング容量(16ビットCPU、2 ^ 16 = 64)であるので、一つのセグメントの最大長は64キロバイトです。
- CPUは物理アドレスと異なるアドレスオフセットのセグメントアドレスを形成してもよいです。
2つのアセンブリ命令
2.1一般データ転送命令
- アセンブラ命令とレジスタ名は、大文字と小文字を区別しません。
- 8ビット16進数は、2ビット、1111 1111 = FFを格納します
- 両者の相互に矛盾ビットの操作対象数を操作することができません。(ERR); BH、斧を追加します
1、数据传输指令
MOV ;传送字或字节
MOVSX ;先符号扩展,再传送
MOVZX ;先零扩展,再传送
PUSH ;把字压入堆栈
POP ;把字弹出堆栈
PUSHA ;把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈
POPA ;把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈
PUSHAD ;把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈
POPAD ;把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈
BSWAP ;交换32位寄存器里字节的顺序
XCHG ;交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG ;比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
XADD ;先交换再累加.( 结果在第一个操作数里 )
XLAT ;字节查表转换
;── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即
;0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
2、输入输出端口传送指令
IN ;I/O端口输入( 语法: IN 累加器, {端口号│DX} )
OUT ;I/O端口输出( 语法: OUT {端口号│DX},累加器 )
;输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, 其范围是 0-65535
3、目的地址传送指令
LEA ;装入有效地址. 例: LEA DX,string ;把偏移地址存到DX.
LDS ;传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES ;传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS ;传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI.
LGS ;传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI.
LSS ;传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.
4、标志传送指令.
LAHF ;标志寄存器传送,把标志装入AH.
SAHF ;标志寄存器传送,把AH内容装入标志寄存器.
PUSHF ;标志入栈.
POPF ;标志出栈.
PUSHD ;32位标志入栈.
POPD ;32位标志出栈.
2.2演算命令
ADD ;加法,等价于ax += bx
ADC ;带进位加法
INC ;加 1
AAA ;加法的ASCII码调整
DAA ;加法的十进制调整
SUB ;减法
SBB ;带借位减法
DEC ;减 1
NEC ;求反(以 0 减之)
CMP ;比较.(两操作数作减法,仅修改标志位,不回送结果)
AAS ;减法的ASCII码调整
DAS ;减法的十进制调整
MUL ;无符号乘法
IMUL ;整数乘法
;以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算)
AAM ;乘法的ASCII码调整
DIV ;无符号除法
IDIV ;整数除法
;以上两条,结果回送:
;商回送AL,余数回送AH, (字节运算);
;或 商回送AX,余数回送DX, (字运算).
AAD ;除法的ASCII码调整
CBW ;字节转换为字(把AL中字节的符号扩展到AH中去)
CWD ;字转换为双字(把AX中的字的符号扩展到DX中去)
CWDE ;字转换为双字(把AX中的字符号扩展到EAX中去)
CDQ ;双字扩展(把EAX中的字的符号扩展到EDX中去)
2.3プログラムの分岐命令
- CS、IPコンテンツ命令を変更することができ、まとめプログラムの分岐命令と呼ばれています。
1、无条件转移指令 (长转移)
JMP ;无条件转移指令
;jmp 2AE3:3; 等价于 mov CS, 2AE3 mov IP, 3;
;jmp ax; 等价于 mov IP, ax;
CALL ;过程调用
RET/RETF ;过程返回
2、条件转移指令 (短转移,-128到+127的距离内)
( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
JA/JNBE ;不小于或不等于时转移
JAE/JNB ;大于或等于转移
JB/JNAE ;小于转移
JBE/JNA ;小于或等于转移
;以上四条,测试无符号整数运算的结果(标志C和Z)
JG/JNLE ;大于转移
JGE/JNL ;大于或等于转移
JL/JNGE ;小于转移
JLE/JNG ;小于或等于转移
;以上四条,测试带符号整数运算的结果(标志S,O和Z)
JE/JZ ;等于转移
JNE/JNZ ;不等于时转移
JC ;有进位时转移
JNC ;无进位时转移
JNO ;不溢出时转移
JNP/JPO ;奇偶性为奇数时转移
JNS ;符号位为 "0" 时转移
JO ;溢出转移
JP/JPE ;奇偶性为偶数时转移
JS ;符号位为 "1" 时转移
3、循环控制指令(短转移)
LOOP ;CX不为零时循环
LOOPE/LOOPZ ;CX不为零且标志Z=1时循环
LOOPNE/LOOPNZ ;CX不为零且标志Z=0时循环
JCXZ ;CX为零时转移
JECXZ ;ECX为零时转移
4、中断指令
INT ;中断指令
INTO ;溢出中断
IRET ;中断返回
5、处理器控制指令
HLT ;处理器暂停, 直到出现中断或复位信号才继续
WAIT ;当芯片引线TEST为高电平时使CPU进入等待状态
ESC ;转换到外处理器
LOCK ;封锁总线
NOP ;空操作
STC ;置进位标志位
CLC ;清进位标志位
CMC ;进位标志取反
STD ;置方向标志位
CLD ;清方向标志位
STI ;置中断允许位
CLI ;清中断允许位
2.4論理演算命令
AND ;与运算.
OR ;或运算.
XOR ;异或运算.
NOT ;取反.
TEST ;测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL ;逻辑左移.
SAL ;算术左移.(=SHL)
SHR ;逻辑右移.
SAR ;算术右移.(=SHR)
ROL ;循环左移.
ROR ;循环右移.
RCL ;通过进位的循环左移.
RCR ;通过进位的循环右移.
;以上八种移位指令,其移位次数可达255次.
;移位一次时, 可直接用操作码. 如 SHL AX,1.
;移位>1次时, 则由寄存器CL给出移位次数.
;如 MOV CL,04
;SHL AX,CL
2.5命令列
DS:SI ;源串段寄存器 :源串变址.
ES:DI ;目标串段寄存器:目标串变址.
CX ;重复次数计数器.
AL/AX ;扫描值
D标志 ;0表示重复操作中SI和DI应自动增量; 1表示应自动减量
Z标志 ;用来控制扫描或比较操作的结束
MOVS ;串传送
;(MOVSB 传送字符, MOVSW 传送字, MOVSD 传送双字)
CMPS ;串比较.
;(CMPSB 比较字符, CMPSW 比较字)
SCAS ;串扫描,把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS ;装入串,把源串中的元素(字或字节)逐一装入AL或AX中
;(LODSB 传送字符, LODSW 传送字, LODSD 传送双字)
STOS ;保存串,是LODS的逆过程
REP ;当CX/ECX<>0时重复
REPE/REPZ ;当ZF=1或比较结果相等,且CX/ECX<>0时重复
REPNE/REPNZ ;当ZF=0或比较结果不相等,且CX/ECX<>0时重复
REPC ;当CF=1且CX/ECX<>0时重复
REPNC ;当CF=0且CX/ECX<>0时重复
2.6ディレクティブ
DW ;定义字(2字节)
PROC ;定义过程
ENDP ;过程结束
SEGMENT ;定义段
ASSUME ;建立段寄存器寻址
ENDS ;段结束
END ;程序结束
3つの通常のデータレジスタ
- 32ビットレジスタを - > EAX;> AX - レジスタ16は64ビットのレジスタ - > RAX。
- 汎用レジスタ:一般的なデータを格納するために使用されるが、一般的にAX、BX、CX、DX、他の4つがあります。
- で8086CPU
- AXは、AHとALに分けることができる;(蓄積レジスタアキュムレータ:乗算、除算、入力のために使用され、中間結果キャッシュの動作を出力することができます。)
- BH、BLとは、BXに分けることができる;(ベースアドレスレジスタベース:メモリ・ポインタとして使用されてもよいです。)
- CH、およびCXはCL分割することができる。(数カウントレジスタ:サイクルと文字列操作は、サイクルの数を制御するために使用される場合、シフト数は、シフトCLを示すためのビット数を使用する場合、ビット操作を、 。)
- DXは、DL及びDHに分けることができる。(データレジスタデータ:乗算と除算の間には、コンピューティングに関与するデフォルトのオペランドとして使用することができ、また、I / Oのポートアドレスを格納するために使用されてもよいです)
- AX:AX下位8ビット(0〜7)は、ALが上位8ビット(8〜15)をレジスタ構成AHレジスタを構成しています。AHおよびAL 2個のレジスタが独立して8ビット・レジスタを使用することができるされています。
- データレジスタに加えて、二つの別個の8ビットレジスタに分けることができ、残りは分離できません。
- ワードは2バイトで構成され、すなわち、16ビットレジスタ内のワードが存在してもよいです。
セグメントレジスタ4
データは、セグメントレジスタ、汎用レジスタ転送必要に直接供給することができない、
二つの連続するメモリを使用するために、メモリに格納された2つのワードが格納する手段と、
3高いストレージアドレス上位バイト、下位アドレスの下位バイト。
CS(コード・セグメント):コード・セグメント・レジスタ、コードの開始アドレスを示します。
- CSの使用:IP次に実行すべき命令を取得します。
DS(データセグメント)のデータセグメントは、データの先頭アドレスを示すためにレジスタと
DSを使用する:EAは、データセクション内のデータにアクセスします。
EAは、オフセットアドレス、すなわち、実効アドレスです。
; 如果没有指定前缀,一般的数据访问在DS(数据)段 mov ax,[1000]; = mov ax,ds:[1000h] mov ax,cs:[1000]; 从指定的CS段取出数据。 [1000] ;代表内存中的数据,1000表示内存单元的偏移地址。
SS(スタック・セグメント):スタック・セグメント・レジスタ、スタック(セグメントアドレス)で指定された開始アドレス。
- SPスタック操作データ:SSを使用しました。
ES(エクストラセグメント):指定された追加のセグメント、アドレス・レジスタの追加のセグメントを開始します。
- ESの使用:EAは、追加のデータセクションにアクセスします。
FS:追加のセグメントレジスタ。
GS:追加のセグメントレジスタ。
CPUのみがCS識別されますメモリセルのIPの内容は、命令によって指されます。
命令ポインタ・レジスタ5
- IP:命令ポインタレジスタ。
6フラグレジスタ
- フラグ:フラグレジスタ。
7アドレッシングレジスタ
SI(ソースインデックス):ソースDSインデックスポインタのセグメントの相対を記憶するために使用されるソースのインデックスレジスタ、処理命令列、文字列のSIの送信元アドレスによって暗示されるように、DSで既定。
DI(先指数):インデックスレジスタオブジェクトがESセグメントに対するインデックスポインタ・オブジェクトを格納するために使用することができ、処理命令の列は、DI文字列オブジェクトは、暗黙的なアドレス、デフォルトESとして使用されます。
; 将字符串"welcome to masm!" 复制到后面的数据区中 assume cs:codesg, ds:datasg datasg segment db 'welcome to masm!' db '…………………………………………' datasg ends codesg segment start: mov ax, datasg mov ds, ax mov si, 0 ;源变址 mov di, 16 ;目的变址,"welcome to masm!"占16个字节 mov cx, 8 ;si,di为16位寄存器,每次2个字节,共需8次 s: mov ax, [si] mov [di], ax add si, 2 add di, 2 loop s mov ax, 4c00h int 21h codesg ends end start
8ポインタレジスタ
- SP(スタックポインタ):オフセットアドレス・スタック・レジスタを保存します。
- BP(ベースポインタ):ベースポインタレジスタは、スタック内のオペランドのアドレスを決定します。
9デバッグ使用
R:CPUレジスタの内容を変更、参照してください。
r # 查看 r ax # 把ax修改为1100 :1100
D:メモリの内容を表示します。
d 段地址/寄存器:偏移地址 # d 500:100 d 段地址/寄存器:偏移地址 结束偏移地址 # d 500:100 109
- 左側には、各ラインの開始アドレスです。
- 文字コード表示ASCⅡに対応するデータの各メモリセルの右側。
- メモリ部128、出力の16進数の形式、コンテンツ出力の16台までの16の整数倍の先頭アドレスからの各ラインの出力の指定されたアドレスから中間コンテンツ。
E:メモリの内容を上書き。
e 段地址/寄存器:偏移地址 数据/字符/字符串/机器码 …… e 段地址/寄存器:偏移地址
U:メモリアセンブリ命令でマシン命令に翻訳。
# 查看指定的内存单元中的机器指令和它们所对应的汇编指令。 u 段地址/寄存器:偏移地址
T:機械命令を実行します。
- でIP手順:CSを実行します。
A:アセンブラ命令の形式は、メモリ内のマシン命令を書き込みます。
組立説明書は、メモリ内のマシン命令の形式で書かれました。
a 段地址/寄存器:偏移地址
P:ループ条件が満たされなくなるまでループ自動手順を繰り返し行います。
G:G 0016、自動的にCSを実行する:16の場所を、
説明:から取られたアセンブラ指示部:https://www.kanxue.com/chm.htm?id=10101&pid=node1001139