《《微机原理与应用》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《微机原理与应用》PPT课件.ppt(50页珍藏版)》请在金锄头文库上搜索。
1、常量表达(常量表达(Constant)常数常数十、十六和二进制形式表达的数值十、十六和二进制形式表达的数值以后缀字母区分,十进制数可以不加以后缀字母区分,十进制数可以不加以字母以字母AF开头的十六进制常数,要加前导开头的十六进制常数,要加前导0字符和字符串字符和字符串英文缩略号括起来的单个字符或多个字符英文缩略号括起来的单个字符或多个字符数值是每个字符对应的数值是每个字符对应的ASCII码值码值符号常量符号常量使用标识符表达一个数值使用标识符表达一个数值符号定义伪指令:等价符号定义伪指令:等价EQU,等号,等号数值表达式数值表达式用运算符连接各种常量构成的算式用运算符连接各种常量构成的算式算术
2、运算符:(加)算术运算符:(加) (减)(减) *(乘)(乘) /(除)(除) 常常量量具具有有确确定定数数值值数据在内存储器中的存储方式数据在内存储器中的存储方式内存储器内存储器( (简称内存简称内存) ):存储参加运算的操作数、:存储参加运算的操作数、 运算的中间结果和最后结果;运算的中间结果和最后结果;数据在内存中常以字节为单位进行存储数据在内存中常以字节为单位进行存储数据地址数据地址:逻辑上将存储器的存储位阵列分为若逻辑上将存储器的存储位阵列分为若干干存储单元(字节,字,双字存储单元(字节,字,双字)并加以编号,单并加以编号,单元的编号称为该元的编号称为该单元的地址单元的地址多字节的存
3、储多字节的存储(a) 字的存储;字的存储; (b) 双字的存储双字的存储 变量定义变量定义申请存储空间,还可以进行存储单元初始化申请存储空间,还可以进行存储单元初始化变量名变量名 变量定义伪指令变量定义伪指令 初值表初值表变量名变量名是用户的是用户的标识符标识符,表示首元素,表示首元素逻辑地址逻辑地址变量定义伪指令有变量定义伪指令有DB、DW、DD、DF、DQ、DT初值表初值表是用逗号分隔的参数是用逗号分隔的参数各种形式的常量各种形式的常量“?”表示初值不确定,即未赋初值表示初值不确定,即未赋初值复制操作符复制操作符DUP重复次数重复次数 DUP(重复参数重复参数)字节量数据(字节量数据(By
4、te-sized)DB定义定义8位、字节量变量数据位、字节量变量数据无符号整数无符号整数0255补码表示的补码表示的有符号整数有符号整数:-128+127一个字符(一个字符(ASCII码值)码值)压缩压缩BCD码:码:099非压缩非压缩BCD码:码:09字符串定义使用字节变量定义字符串定义使用字节变量定义DB例题例题3-3字节变量程序字节变量程序= 000Aminint= 100000 00 80 FF 80 00 7Fbvar1db 0,128,255,-128,0,+1270006 01 FF 26 DA 38 C8bvar2db 1,-1,38,-38,38h,-38h000C 00bv
5、ar3db ?000D 0005 24 bvar4db 5 dup ($)0012 000A 00 000A 0A 00 bvar5db minint dup(0),minint dup(minint,?)0030 0002 02 03 0002 04 db 2 dup(2,3,2 dup(4)字量数据(字量数据(Word-sized)DW定义定义16位、字量变量数据位、字量变量数据包含高低两个字节,包含高低两个字节,16位无符号和有符号整数位无符号和有符号整数16位段地址,位段地址,16位偏移地址位偏移地址占用占用2个连续的字节存储单元个连续的字节存储单元小端方式小端方式(Little En
6、dian)低字节数据低字节数据存放在存放在低地址存储单元低地址存储单元高字节数据高字节数据存放在存放在高地址存储单元高地址存储单元例题例题3-4字变量程序字变量程序= 000Aminint= 100000 0000 8000 FFFF 8000 0000 7FFFwvar1dw 0,32768,65535,-32768,0,+32767000C 0001 FFFF 0026 FFDA 0038 FFC8wvar2dw 1,-1,38,-38,38h,-38h0018 0000wvar3dw ?001A 2010 1020wvar4dw 2010h,1020h001E 0005 000A 000
7、0 dw 5 dup(minint,?)0032 3139 3832wvar6dw 3139h,3832h 双字量数据(双字量数据(Doubleword-sized)DD定义定义32位、双字量变量数据位、双字量变量数据“高对高、低对低高对高、低对低”占用占用4个连续字节空间个连续字节空间例题例题3-5双字变量程序双字变量程序= 000Aminint= 100000 00000000 80000000 FFFFFFFF 80000000 00000000 7FFFFFFFdvar1dd 0,80000000h,0ffffffffhdd -80000000h,0,7fffffffh0018 000
8、00001 FFFFFFFF 00000026 FFFFFFDA 00000038 FFFFFFC8dvar2dd 1,-1,38,-38,38h,-38h0030 00000000 dvar3dd ?0034 00002010 00001020dd 2010h,1020h003C 000A 0000000A 00000000 dvar5dd minint dup(minint,?)008C 38323139 dvar6dd 38323139h定位伪指令定位伪指令ORG变量定义变量定义和指令代码和指令代码按照书写先后顺序按照书写先后顺序安排安排分配存储空间分配存储空间“ORG 参数参数”控制存
9、放的偏移地址控制存放的偏移地址org 100h;从偏移地址从偏移地址100H处安排处安排存储模式确定存储模式确定逻辑段顺序默认是逻辑段顺序默认是标准标准DOS程序顺序程序顺序,地址,地址从低到高依次安排:从低到高依次安排:代码段代码段、数据段数据段和和堆栈段堆栈段逻辑段之间有默认的边界定位规定,一个段不逻辑段之间有默认的边界定位规定,一个段不必紧接着另一个段(中间可能有未用空间)必紧接着另一个段(中间可能有未用空间)逻辑段起始的偏移地址逻辑段起始的偏移地址不一定是不一定是0变量属性变量属性变量定义变量定义分配存储空间分配存储空间赋初值赋初值创建变量名创建变量名变量名具有两类属性变量名具有两类属
10、性: 地址属性地址属性:首个变量所在存储单元的逻辑地址首个变量所在存储单元的逻辑地址含有含有段地址段地址和和偏移地址偏移地址 类型属性类型属性:指变量定义的数据单位:指变量定义的数据单位字节量字节量BYTE 字量字量WORD 双字量双字量DWORD 3字量字量FWORD 4字量字量QWORD 10字节量字节量TBYTE地址操作符地址操作符地址操作符用于获取变量名的地址属性地址操作符用于获取变量名的地址属性 括起的表达式作为存储器地址指针括起的表达式作为存储器地址指针$返回当前偏移地址返回当前偏移地址OFFSET 变量名变量名 返回变量名所在段的偏移地址返回变量名所在段的偏移地址SEG 变量名变
11、量名返回变量名所在段的段地址返回变量名所在段的段地址例题例题3-6变量地址属性程序变量地址属性程序-10000 .data0000 12 34bvar db 12h,34horg $+10 000C 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A array dw 1,2,3,4,5,6,7,8,9,100020 5678 wvar dw 5678h0022 = 0016arr_size = $-array= 000Barr_len = arr_size/20022 9ABCDEF0dvar dd 9abcdef0h例题例题3-6变量地址属性
12、程序变量地址属性程序-20000 .code.startup0010 A0 0000 R mov al,bvar0013 8A 26 0001 Rmov ah,bvar+10017 8B 1E 0022 Rmov bx,wvar2001B 66| 8B 0E 0022 Rmov ecx,dvar0020 66| BE 00000022 Rmov esi,offset dvar0026 67& 66| 8B 3Emov edi,esi002A 66| 8B 2E 0022 Rmov ebp,dvar002F BA - Rmov dx,seg dvar.exit例题例题3-6变量地址属性程序变量地
13、址属性程序-10000 .data0000 12 34bvar db 12h,34horg $+10 000C 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A array dw 1,2,3,4,5,6,7,8,9,100020 5678 wvar dw 5678h0022 = 0016arr_size = $-array= 000Barr_len = arr_size/20022 9ABCDEF0dvar dd 9abcdef0h例题例题3-6变量地址属性程序变量地址属性程序-20000 .code.startup0010 A0 0000 R
14、 mov al,bvar0013 8A 26 0001 Rmov ah,bvar+10017 8B 1E 0022 Rmov bx,wvar2001B 66| 8B 0E 0022 Rmov ecx,dvar0020 66| BE 00000022 Rmov esi,offset dvar0026 67& 66| 8B 3Emov edi,esi002A 66| 8B 2E 0022 Rmov ebp,dvar002F BA - Rmov dx,seg dvar.exit注意:注意:mov al,bvar=mov al,bvar类型操作符类型操作符类型操作符使用变量名的类型属性类型操作符使用变
15、量名的类型属性类型名类型名 PTR 变量名变量名将变量名按照指定的类型使用将变量名按照指定的类型使用TYPE 变量名变量名返回占用字节空间的字量数值返回占用字节空间的字量数值LENGTHOF 变量名变量名返回整个变量的数据项数返回整个变量的数据项数SIZEOF 变量名变量名返回整个变量占用的字节数返回整个变量占用的字节数双字量数据(双字量数据(Doubleword-sized)DD定义定义32位、双字量变量数据位、双字量变量数据“高对高、低对低高对高、低对低”占用占用4个连续字节空间个连续字节空间例题例题3-7变量类型属性程序变量类型属性程序;代码段代码段0010 A1 0000 R mov
16、ax,word ptr bvar0013 BB 0001mov bx,type bvar0016 B9 0002mov cx,type wvar0019 BA 0004mov dx,type dvar001C BE 000Amov si,lengthof array001F BF 0014mov di,sizeof array0022 BD 0016mov bp,arr_size第第4章章 IA-32指令系统指令系统4.1 数据寻址方式数据寻址方式4.1.1 立即数寻址方式立即数寻址方式4.1.2 寄存器寻址方式寄存器寻址方式4.1.3 存储器寻址方式存储器寻址方式4.2 数据传送类指令数据传
17、送类指令4.2.1 数据传送指令数据传送指令4.2.2 堆栈操作指令堆栈操作指令4.2.3 地址传送指令地址传送指令4.3 算术运算类指令算术运算类指令4.3.1 加法指令加法指令4.3.2 减法指令减法指令4.3.3 乘法除法等指令乘法除法等指令4.4 位操作类指令位操作类指令4.4.1 逻辑运算指令逻辑运算指令4.4.2 移位指令移位指令4.5 串操作类指令串操作类指令4.5.1 串操作的寻址特点串操作的寻址特点4.5.2 串传送指令串传送指令4.5.3 串检测指令串检测指令指令格式指令格式指令操作码指令操作码 目的操作数来源目的操作数来源, 源操作数来源源操作数来源 mov ah, 9
18、操作码表明完成何种操作操作码表明完成何种操作操作数来源种类:寄存器、立即数、存储器数据等操作数来源种类:寄存器、立即数、存储器数据等80x86指令指令(编码编码)格式格式指令结构:指令结构:单单/ /多字节二进制代码多字节二进制代码操作码、操作数:操作码、操作数:由指令不同字节确定由指令不同字节确定寻址方式:寻址方式:操作数的寻找方法,由指令特定字节确定;操作数的寻找方法,由指令特定字节确定;指令助记符:指令助记符:便于记忆的指令字母表示,通过汇编软便于记忆的指令字母表示,通过汇编软件实现件实现给出立即寻址方式需要的数值本身给出立即寻址方式需要的数值本身给出某些寻址方式需要的对基地址的偏移量给
19、出某些寻址方式需要的对基地址的偏移量8086的机器代码格式的机器代码格式表明采用的寻址方式表明采用的寻址方式1/2字节字节0/1字节字节0/1/2字节字节0/1/2字节字节操作码操作码mod reg r/m位移量位移量立即数立即数操作数操作数数据寻址方式数据寻址方式指令有两部分:操作码和操作数指令有两部分:操作码和操作数操作码:操作码:处理器要执行哪种操作,不可缺少,用助记处理器要执行哪种操作,不可缺少,用助记符表示符表示操作数:操作数:指令执行的参与者,即各种操作的对象,需指令执行的参与者,即各种操作的对象,需要通过地址指示要通过地址指示数据寻址方式:通过地址查找数据(操作数)数据寻址方式:
20、通过地址查找数据(操作数)立即数寻址:立即数寻址:数据与指令操作码一起,用常量表达数据与指令操作码一起,用常量表达寄存器寻址:寄存器寻址:数据在寄存器中,用寄存器名表示数据在寄存器中,用寄存器名表示存储器寻址:存储器寻址:数据在主存中,用存储器地址代表数据在主存中,用存储器地址代表CPU主存主存通用寄存器通用寄存器专用寄存器专用寄存器 数据段、堆栈段、数据段、堆栈段、附加段附加段代码段代码段数据数据物理地址物理地址操作数可能存放的位置操作数可能存放的位置CPU主存主存通用寄存器通用寄存器专用寄存器专用寄存器 数据段、堆栈段、数据段、堆栈段、附加段附加段代码段代码段数据数据物理地址物理地址操作数
21、可能存放的位置操作数可能存放的位置立即数寻址立即数寻址操作数紧跟操作码,是指令机器代码的一部分操作数紧跟操作码,是指令机器代码的一部分操作数从操作数从指令代码指令代码中立即得到,即中立即得到,即立即数立即数(Immediate),用),用常量形式常量形式直接表达直接表达立即数寻址方式只用于立即数寻址方式只用于源操作数源操作数,常用来给,常用来给寄寄存器存器和和存储单元存储单元赋值赋值例如:例如:MOV AX,0102H机器代码:机器代码:B8 02 01操作码:操作码:B8立即数:立即数:0102CPU主存主存通用寄存器通用寄存器专用寄存器专用寄存器数据段、堆栈段数据段、堆栈段附加段附加段代码
22、段代码段数据数据物理地址物理地址操作数可能存放的位置操作数可能存放的位置寄存器寻址寄存器寻址操作数存放在处理器的内部寄存器中操作数存放在处理器的内部寄存器中用用寄存器名寄存器名表示它的内容表示它的内容绝大多数指令采用绝大多数指令采用通用寄存器通用寄存器寻址寻址部分指令支持部分指令支持专用寄存器专用寄存器,例如,例如 段寄存器段寄存器寄存器寻址方式寄存器寻址方式简单快捷,最常使用简单快捷,最常使用8位通用寄存器:位通用寄存器:AH AL BH BL 16位通用寄存器:位通用寄存器:AX BX CX DX 32位通用寄存器:位通用寄存器:EAX EBX ECX EDX 段寄存器:段寄存器:CS D
23、S SS ES FS GSCPU主存主存通用寄存器通用寄存器专用寄存器专用寄存器数据段、数据段、堆栈段、堆栈段、附加段附加段代码段代码段数据数据物理地址物理地址操作数可能存放的位置操作数可能存放的位置存储器寻址:段地址表达存储器寻址:段地址表达操作数在主存中操作数在主存中编程时主存使用编程时主存使用逻辑地址逻辑地址:段地址和偏移地址段地址和偏移地址段地址段地址可以使用可以使用默认逻辑段默认逻辑段,不用显式说明,不用显式说明一般是一般是DS指向数据段指向数据段采用采用BP/EBP或或SP/ESP作为基地址,默认作为基地址,默认SS指向指向堆栈段堆栈段段地址必要时使用段地址必要时使用段超越指令前缀
24、段超越指令前缀显式说明显式说明段超越指令前缀:段寄存器名后跟英文冒号段超越指令前缀:段寄存器名后跟英文冒号CS DS SS ES FS GS 直接寻址直接寻址有效地址只有偏移量,直接包含在指令代有效地址只有偏移量,直接包含在指令代码中码中例如:例如: MOV AX, DS:2000H指令代码:指令代码:A1 00 20操作码:操作码:A1操作数:有效地址操作数:有效地址 2000h例题例题4-3存储器直接寻址存储器直接寻址程序程序;代码段代码段0010 A1 2000mov ax,ds:2000h0013 26: A1 2000mov ax,es:2000h0017 A1 0009 Rmov
25、ax,wvar001A 8A 36 0000 R mov dh,bvar001E 66| 8B 1E 000F R mov ebx,dvar0023 66| 8B 0E 0009 R mov ecx,dword ptr wvar0028 66| 89 1E 0017 Rmov dvar+8,ebx002D C7 06 000D R 0FE0mov wvar+4,0fe0h寄存器间接寻址寄存器间接寻址有效地址有效地址存放在存放在寄存器寄存器中中(寄存器内容有效地址寄存器内容有效地址)16位有效地址位有效地址只能使用只能使用BX、BP、SI和和DI32位有效地址位有效地址通过通过任何一个任何一个3
26、2位通用寄存器位通用寄存器mov al,bx ;字节量传送字节量传送,16位有效地址位有效地址mov ax,si;字量传送字量传送,16位有效地址位有效地址mov eax,di ;双双字量传送字量传送,16位有效地址位有效地址mov esi,cx;字量传送字量传送,32位有效地址位有效地址mov ebx,edx ;双双字量传送字量传送,32位有效地址位有效地址mov word ptr ebp,1394h;字量传送字量传送,32位有效地址位有效地址寄存器间接寻址寄存器间接寻址没有说明没有说明存储单元类型存储单元类型例题例题4-4寄存器间接寄存器间接寻址寻址程序程序;数据段数据段0000 57 4
27、5 4C 4C 44 4F 4E 45msg db WELLDONE;代码段代码段0010 66| B9 00000008mov ecx,lengthof msg0016 66| BB 00000000 Rmov ebx,offset msg001C 67& 8A 03 again:mov al,ebx001F 04 20add al,20h0021 67& 88 03mov ebx,al0024 66| 83 C3 01add ebx,10028 E2 F2loop again寄存器相对寻址寄存器相对寻址有效地址有效地址是是寄存器内容与位移量之和寄存器内容与位移量之和mov ax,di+06
28、h ;AXDS:DI+06H寄存器:寄存器:DI位移量:位移量:06H有效地址:有效地址:EADI06Hmov ax,ebp-06h ;AXSS:EBP-06H使用使用EBP寄存器,默认配合寄存器,默认配合SS段寄存器段寄存器例题例题4-5寄存器相对寄存器相对寻址寻址程序程序0010 66| B9 00000008mov ecx,lengthof msg0016 66| BB 00000000mov ebx,0001C 67& 8A 93 00000000 Ragain:mov dl,msgebx0023 80 C2 20add dl,20h0026 67& 88 93 00000000 Rm
29、ov msgebx,dl002D 66| 83 C3 01add ebx,10031 B4 02mov ah,20033 CD 21int 21h0035 E2 E5loop again功能编号功能编号 AH02H入口参数入口参数 DLASCII码码功能说明功能说明 显示一个字符显示一个字符基址变址寻址基址变址寻址有效地址基址寄存器变址寄存器有效地址基址寄存器变址寄存器便于支持两维数组等数据结构便于支持两维数组等数据结构mov ax,bx+si ;AXDS:BX+SImov ax,bp+di ;AXSS:BP+DImov ds:bp+si,al;DS:BP+SIALmov dword ptr
30、ebx+esi,0aa885h;DS:EBX+ESIAA885H注意:注意:1、IA-16 基址寄存器基址寄存器 bx,bp; 变址寄存器变址寄存器si,di;2、IA-32 基址寄存器:基址寄存器:8个个32位通用寄存器位通用寄存器 变址寄存器:除变址寄存器:除ESP外外32位寄存器位寄存器相对基址变址寻址相对基址变址寻址有效地址基址寄存器变址寄存器位移量有效地址基址寄存器变址寄存器位移量mov ax,bx+si+06h;AXDS:BX+SI+06Hmov bvareax+edi,dh ;DS:BVAREAX+EDIDH允许两个寄存器都用中括号,位移量在中括号前允许两个寄存器都用中括号,位移
31、量在中括号前mov ax,06hbx+si;AXDS:BX+SI+06Hmov ax,06hbxsi;AXDS:BX+SI+06Hmov bvareaxedi,dh;DS:BVAREAX+EDIDH带比例存储器寻址(带比例存储器寻址(IA-32)变址寄存器内容乘以变址寄存器内容乘以比例比例1(可省略),(可省略),2,4或或8的的带比例存储器寻址带比例存储器寻址mov eax,ebx*2;带比例的变址寻址带比例的变址寻址mov eax,esi*2+80h;带比例的变址寻址带比例的变址寻址mov eax,ebx+esi*4;基址的带比例的变址寻址基址的带比例的变址寻址mov eax,ebx+es
32、i*8+80h ;基址的带位移量的带比例的变址寻基址的带位移量的带比例的变址寻址址例题例题4-6带比例存储器带比例存储器寻址寻址程序程序;数据段数据段0000 00000001 00000002 00000003 00000004 00000005 00000006 00000007 00000008 00000009 0000000Aarray1dd 1,2,3,4,5,6,7,8,9,100028 000A 00000000array2 dd 10 dup(?);代码段代码段0010 66| B9 0000000Amov ecx,lengthof array10016 66| BB 000
33、00000mov ebx,0001C 67& 66| 8B 04 9D 00000000 Ragain:mov eax,array1ebx*40025 66| 05 00008000add eax,8000h002B 67& 66| 89 04 9D 00000028 Rmov array2ebx*4,eax0034 66| 83 C3 01 add ebx,10038 E2 E2loop again存储器寻址:偏移地址表达存储器寻址:偏移地址表达主存操作数的偏移地址常被称为主存操作数的偏移地址常被称为有效地址有效地址EA32位有效地址位有效地址 基址寄存器(变址寄存器基址寄存器(变址寄存器比
34、例)位移量比例)位移量基址寄存器:任何基址寄存器:任何8个个32位通用寄存器之一位通用寄存器之一变址寄存器:除变址寄存器:除ESP之外的任何之外的任何32位通用寄存器之一位通用寄存器之一比例:比例:1,2,4或或8位移量:位移量:8或或32位有符号值位有符号值16位有效地址位有效地址 基址寄存器变址寄存器位移量基址寄存器变址寄存器位移量基址寄存器:基址寄存器:BX或或BP变址寄存器:变址寄存器:SI或或DI位移量:位移量:8或或16位有符号值位有符号值存储器寻址格式:存储器寻址格式:32/16位有效地址表达式位有效地址表达式 变量名表达式变量名表达式寻址方式总结寻址方式总结寻址方式寻址方式最终
35、目的:最终目的:针对特定存储单元读取或者写针对特定存储单元读取或者写入操作数入操作数方式:通过给出方式:通过给出操作数所在位置操作数所在位置源操作数寻址方式源操作数寻址方式和和目的操作数寻址方式目的操作数寻址方式3类操作数存储位置类操作数存储位置8类类寻址方式寻址方式变量名变量名在在操作数寻址操作数寻址中的使用中的使用传送指令传送指令MOV把一个字节、字或双字的操作数从源位置把一个字节、字或双字的操作数从源位置传送至目的位置传送至目的位置立即数立即数存存储储器器通用通用寄存器寄存器段寄存器段寄存器并非任意传送并非任意传送 !双操作数必须类型一致双操作数必须类型一致操作数必须有明确的类型操作数必
36、须有明确的类型双操作数不允许都是存储单元双操作数不允许都是存储单元操作专用寄存器的指令有限操作专用寄存器的指令有限常见错误指令常见错误指令MOV AL,050AHMOV SI,DLMOV BX+SI,255;假设假设wbuf1和和wbuf2是两个字变量是两个字变量MOV WBUF2,WBUF1MOV DS,ESMOV DS,100H错在哪里?错在哪里?如何改正?如何改正?交换指令交换指令XCHG将将源操作数源操作数和和目的操作数目的操作数内容交换内容交换通用寄存器通用寄存器与与通用寄存器通用寄存器之间之间通用寄存器通用寄存器或或存储器之间存储器之间空操作指令空操作指令NOP:XCHG AX,A
37、X微处理器执行空操作该指令,需要化费时间,微处理器执行空操作该指令,需要化费时间,在主存中也要占用一个字节空间在主存中也要占用一个字节空间实现短时间延时实现短时间延时临时占用代码空间临时占用代码空间xchg eax,ebxxchg dl,dhxchg al,edi例题例题4-7数据交换程序数据交换程序;数据段数据段0000 06 07 07 08 03 00 00 00numdb 6,7,7,8,3,0,0,00008 36 37 37 38 33 30 30 30tabdb 67783000;代码段代码段0010 66| B9 00000008mov ecx,lengthof num0016 66| BE 00000000 R mov esi,offset num001C 66| BF 00000008 R mov edi,offset tab0022 67& 8A 06again:mov al,esi0025 67& 86 07xchg al,edi0028 67& 88 06mov esi,al002B 66| 83 C6 01add esi,1002F 66| 83 C7 01add edi,10033 E2 EDloop again