摘要:AH&AL=AX(accumulator):累加寄存器 BH&BL=BX(base):基址寄存器 CH&CL=CX(count):计数寄存器 DH&DL=DX(data):数据寄存器 SP(Stack Pointer):堆栈指针寄存器 BP(Base Pointer):基址指针寄存器 SI(Source Index):源变址寄存器 DI(Destination Index):目的变址寄存器 IP(Instruction Pointer):指令指针寄存器 CS(Code Segment)代码段寄存器 DS(Data Segment):数据段寄存器 SS(Stack
阅读全文
摘要:CMP source target影响标志位:> CF=1 =ZF=0< CF =0如果是有符号操作数> SF <> OF< SF=OF= ZF =1
阅读全文
摘要:Uses指令紧跟PROCPROC USES EAX,EBX做两件事过程入口时先对寄存器压栈操作过程退出时 对寄存器出栈操作 ArraySum PROC USES esi,ecx mov eax,0 ; mov ecx,5L1: add eax,[esi] add esi,4 loop L1 retarraySum ENDP反汇编后得到 ArraySum PROC USES esi,ecx push eax, push ecx mov eax,0 ; mov ecx,5L1: add eax,[esi] add esi,4 loop L1 pop ecx pop eax retarraySum
阅读全文
摘要:TITLE Copying a stringINCLUDE Irvine32.inc.datasource BYTE "This is the source string"target BYTE SIZEOF source DUP(0),0 .codemain PROC mov esi,0 ;偏移地址 esi = 0 mov ecx,SIZEOF source ;循环次数L1: mov al,source[esi] mov target[esi],al inc esi loop L1 exit main ENDP
阅读全文
摘要:一、间接寻址 保护模式:间接操作数可以是任何用[]任意32位通用寄存器 实地址模式:只能使用BP,SI,DI,BX ,BP通常是对堆栈段寻址PTR: 与间接操作数的联合使用.inc BYTE PTR [esi]二、变址寻址变址操作数:[常量+寄存器] 得出内存单元计算偏移地址时必须考滤到每个数组元素大小
阅读全文
摘要:TITLE Data Transfer ExampleINCLUDE irvine32.inc.dataval1 WORD 1000hval2 WORD 2000harrayB BYTE 10h,20h,30h,40h,50harrayW WORD 100H,200H,300HarrayD DWORD 100000h,20000H.codemain PROC ;MOVZX(move with zero-extend) mov bx,0A69Bh movzx,eax,bx ;0000A69BH movzx edx,bl ;00000009H movzx,cx,bl ;0009H ;MOVSX(.
阅读全文
摘要:LAHF(load status flags into AH) 指令将EFLAGS低字节复制进AH中 受影响Flags:SF,ZF,AF,PF,CF.datasaveFalgs BYTE ? .codelahfmov saveflags,ahSAHF(store AH into status flags) 把AH寄存器的值复制到EFLAGS低字节中mov ah,saveflagssahf XCHG(exchange data) 交换两个操作数的内容XCHG reg,regXCHG reg ,memXCHG mem,regXCHG不用能立即数操作数,如果要交换必须使用一个寄存器作临时变量mov.
阅读全文
摘要:page 60,132TITLE A0405Loop(EXE) LOOP跳转指令 .MODEL SMALL .STACK 64 .DATA ORG 100H ;规定程序的起始地址 A10MAIN PROC NEAR MOV AX,00 MOV BX,00 MOV DX,01 MOV CX,10 ;循环次数 A20: ADD AX,01 ADD BX,AX SHL DX,1 ;左移一位 LOOP A20 ;跳转到A20,cx为0时 退出 LOOP指令执行时自动将cx =cx-1 MOV AX,4C00H INT 21H A10MAIN endp
阅读全文
摘要:page 60,132TITLE A0405Jump(EXE) JMP跳转指令.MODEL SMALL.STACK 64.DATAORG 100H ;规定程序的起始地址A10MAIN PROC NEARMOV AX,00MOV BX,00MOV CX,1A20: ADD AX,01ADD BX,AXSHL CX,1 ;左移一位JMP A20 ;跳转到A20A10MAIN endpjmp格式[label:] jmp short/near/far/address跳转距离跟声明的proc short/near/far 有关
阅读全文
摘要:1.短地址: 偏移范围-127~1282.近地址: 偏移范围-32678~32677 在同一段内3.远地址: 32位偏移地址,可以另一段中
阅读全文
摘要:page 60,132TITLE A0404IMMED(EXE) 立即数操作 .MODEL SMALL ;存储模型 .STACK 64 ;栈空间大小 .DATA ;数据段 DB 'Immediate Values' ;字符串BYTEFLD DB 150 ;字节 8位 0~255WORDFLD DW 300 ;字 16位 255*255 0~65535DWDFLD DD 0 ;双字 32位 65535*65535.386 .CODEMAIN PROC FAR MOV AX,@data MOV DS,AX MOV CX,325 ADD CX,150 SUB BYTEFLD,50 M
阅读全文
摘要:TITLE A06MOVE (EXE) Repetitive move operations.MODEL SMALL.STACk 64;---------------------------------------------------------------------- .DATAHEADNG1 DB 'InterTech'HEAdNG2 DB 9 DUP('*'),'$'.CODEA10MAIN PROC FARMOV AX,@data ;初始化数据段MOV DS,AX ;MOV ES,AX MOV CX,09 ;循环次数LEA SI,H
阅读全文
摘要:语法:segment-name SEGMENT [align] [combine] ['class']segment-nam ends [align]选项指明段开始边界,典型要求是para,它使段定位在在小段的边界。起码地址正好被16/10H整除,可以省略,默认为para[combine]组合 决定本段是否要和其它段组合在一起,组合类型:STACK,COMMON,PUBLIC,['Class']连接时用于相关段组合在一起,如代码段‘code’,数据段 'Data',堆栈段'Stack' PAGE 60,132 ;页面大小TITLE
阅读全文
摘要:伪指令PAGE和TITLE 用来控制被汇编的程序的列表格式PAGE [length][name]指定列在一页上的最大列数和一行上最大的字符数PAGE 60,130 每页最多60列,每行130行字符 TITLE text [comnent]标题 文本 注释TITLE Assemly 这是汇编程序
阅读全文
摘要:寄存器名 说明 作用CS 有效程序代码的起始地址 CS:IP指向要执行的指令 (IP:偏移地址)DS 数据的起始地址 利用DS:偏移地址得到数据单元SS 堆栈起始地址 SS:SP(SP:栈指针)对栈进行操作取数据ES 段寄存器(在某些串中用于存储器寻址)与DI,SI相关联FS/GS 备用附加段寄存器指令指针寄存器16位IP寄存器包含要执行下一条指令的偏移地址 如上图中:[CS]=140CH,IP=0000H下一条指令为CS:IP = 140C:0000同理堆栈SS:SP指向栈顶位置BP可以使程序通过堆栈传递数据和地址,处理 器把在SS中的地址和BP中的偏移值组合起来,也可以和SI,DI组合起来
阅读全文