3-简单传送,加减指令&标志寄存器

一、简单传送指令

1747051478856.webp

  • 示例
MOV	EAX, 12345678H	//EAX =	12345678H
MOV	EBX, EAX		//EBX =	12345678H
MOV	ESI, 256		//ESI =	00000100H 
MOV	ECX, -1			//ECX =	FFFFFFFFH
MOV	BX, ‘b’			//EBX =	12340062H
MOV	AH, AL			//EAX =	12347878H
MOV	CX, AX			//ECX =	FFFF7878H
MOV	AX, SI			//EAX =	12340100H
MOV	SI, BX			//ESI =	00000062H
MOV	AL, BH			//EAX =	12340100H

1747051629241.webp

  • 示例
XCHG    AL, AH          //8位交换
XCHG    SI, BX          //16位交换
XCHG    EAX, EBX        //32位交换

XCHG    AL, [EBX]       //AL与由EBX指定的字节存储单元交换
XCHG    [ESI], BX       //BX与由ESI指定的字存储单元交换
XCHG    EDX, [EDI]      //EDX与由EDI指定的双字存储单元交换

二、加减指令

1747051822803.webp

  • 示例
ADD ECX,200		//使ECX加上200
ADD EBX,ECX		//使EBX加上ECX的值
ADD SI,10		//使SI加上10
ADD DH,DL		//使DH加上DL的值
ADD AL,5		//使AL加上5
ADD EAX,[EBX]	//使EAX加上EBX的值指定的存储单元的值

1747051907692.webp

1747057025764.webp
示例:

SUB    EDX,1000       //使EDX减去1000
SUB    ESI,EBX        //使ESI减去EBX值
SUB    DI,20          //使DI减去20
SUB    DH,CL          //使DH减去CL值
SUB    AL,7           //使AL减去7
SUB    ECX,[EDI]      //使ECX减去由EDI指定的双字存储单元值

1747057112278.webp
示例:

INC    ESI 	//使寄存器ESI值加1
INC    DI   //使寄存器DI值加1
INC    CL   //使寄存器CL值加1

1747057173044.webp
示例:

DEC   EDI     //使寄存器EDI值减1
DEC   SI      //使寄存器SI值减1
DEC   AL      //使寄存器AL值减1

1747057279293.webp
示例:

MOV   AL,3       //AL=03H
NEG   AL         //AL=FDH(-3)
MOV   EDX,-5     //EDX=FFFFFFFBH
NEG   EDX        //EDX=00000005H

1747057360282.webp
示例:

/*
dp26
	利用带符号加法ADC,处理可能产生的进位
*/

#include<stdio.h>

int main()
{
	unsigned char v1 = 188, v2 = 172, v3 = 233;	//3个字节变量
	unsigned int sum = 0;

	_asm
	{
		XOR EDX,EDX			//EDX清零,DX用于存放累加和
		ADD DL,v1			//加第一个字节
		ADC DH,0			//高8位相加

		ADD DL, v2			//加第二个字节
		ADC DH, 0			//高8位相加(意在处理进位)
		
		ADD DL, v3			//加第三个字节
		ADC DH, 0			//高8位相加(意在处理进位)

		MOV sum,EDX
	}
	// 通过ADC带位加法,使得可以保证处理进位,将仅为成功加到高位中
	
	printf("sum=%u\n", sum);
	system("pause");
	return 0;
}

1747057421118.webp
示例:

MOV AX,620H
SUB AL,21H		//AX=06FFH, CF=1
SBB AH,2		//AX=03FFH,CF=0	(注意这里CF的影响)
SBB AH,2		//AX=01FFH,CF=0

三、标志寄存器及使用

1. 标志寄存器

  • 一个32位寄存器
  • 用于反映处理器的状态和运算结果的某些特征
  • 可以暂时认为主要是:状态标志 & 控制标志
  • 低16位对应8086的FLAGS寄存器
    1747057567052.webp
    1747057610001.webp

2. 状态标志

(1)CF进借位标志
1747057727585.webp
1747057749584.webp

(2)ZF零标志
1747057808999.webp
1747057827002.webp

(3)SF符号标志
1747057877487.webp
1747057899713.webp

(4)OF溢出标志
1747057931478.webp
1747057961047.webp

posted @ 2025-10-23 14:41  pridelzh  阅读(3)  评论(0)    收藏  举报