为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

ch08-汇编语言程序格式2

2012-10-28 1页 ppt 400KB 9阅读

用户头像

is_184083

暂无简介

举报
ch08-汇编语言程序格式2nullnull 汇编语言程序格式 主讲人:黄永平null目录一、汇编语言概述 二、汇编语言格式 三、伪指令 四、操作数字段 五、汇编语言源程序的结构 null一、汇编语言概述机器语言 计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。 用机器语言编写的程序是计算机唯一能够直接识别并执行的程序,而用其他语言编写的程序必须经过翻译才能变换成机器语言程序,所以,机器语言程序被称为目标程序。 null一、汇编语言概述汇编语言 为了克服...
ch08-汇编语言程序格式2
nullnull 汇编语言程序格式 主讲人:黄永平null目录一、汇编语言概述 二、汇编语言格式 三、伪指令 四、操作数字段 五、汇编语言源程序的结构 null一、汇编语言概述机器语言 计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。 用机器语言编写的程序是计算机唯一能够直接识别并执行的程序,而用其他语言编写的程序必须经过翻译才能变换成机器语言程序,所以,机器语言程序被称为目标程序。 null一、汇编语言概述汇编语言 为了克服机器语言的缺点,人们采用助记符示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。所以汇编语言是一种用符号书写的、基本操作与机器指令相对应的、并遵循一定语法规则的计算机语言。 用汇编语言编写的程序称为汇编源程序。 汇编语言是一种符号语言,比机器语言容易理解和掌握,也容易调试和维护。但是,汇编语言源程序要翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为“汇编”,这种把汇编源程序翻译成目标程序的语言加工程序称为汇编程序(汇编器,编译器)。 null一、汇编语言概述高级语言 汇编语言虽然较机器语言直观,但仍然烦琐难懂。于是人们研制出了高级程序语言。高级程序设计语言接近于人类自然语言的语法习惯,与计算机硬件无关,易被用户掌握和使用。目前广泛应用的高级语言有多种,如BASIC、FORTRAN、PASCAL、C、C++、Java,C#等等。 例出你所知道的计算机语言有哪些? null一、汇编语言概述汇编语言的特点(1)汇编语言与处理器密切相关,可移植性差。 (2)汇编语言程序效率高。 (3)编写汇编语言源程序比编写高级语言源程序烦琐。 (4)调试汇编语言程序比调试高级语言程序困难。 null一、汇编语言概述汇编语言的主要应用场合(1)程序执行占用较短的时间,或者占用较小存储容量的场合。 (2)程序与计算机硬件密切相关,程序直接控制硬件的场合,实时控制。 (3)需提高大型软件性能的场合(选一个好的C编译器可解决)。 (4)没有合适的高级语言的场合。(OS中上下文保存等,如linux) null一、汇编语言概述汇编语言程序的建立及处理过程编辑程序汇编源程序 xxx.ASM汇编程序MASM5.0 TASM MASM32NotePad UtraEdit Notepad++浮动目标文件 xxx.OBJ连接程序可执行文件 xxx.EXE xxx.comLINKEmu8086 ---IDE仿真环境系统库lib 系统.objnull二、汇编语言格式汇编语言中有三种基本语句: 指令语句—汇编时,产生对应的机器目标代码。 伪指令—汇编时,无目标代码,用于定义符号、分配内存、初始化存储器。 宏指令—用宏名称来定义的一段指令序列。(如C中#define )null二、汇编语言格式 [标号:] 机器指令助记符 [操作数] [;注释]标号是机器指令语句存放地址的符号表示,代表该指令目标代码的第一个字节地址,后面必须紧跟冒号“:” 。汇编指令机器指令 指令助记符为语句的核心成分,表示了该语句的操作类型。操作数表示指令助记符的操作对象。指令语句格式(机器指令)注释均以分号开始,它可占一行或多行,一般放在一条语句的后面。 next: MOV AX, BX ; 把BX内容送到AXnull二、汇编语言格式 [符号名] 伪指令助记符 [操作数] [;注释]常量名 变量名 过程名 段名 结构名 记录名伪指令符指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,假定伪指令ASSUME等。伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。伪指令语句格式(汇编程序解释)伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。var1 DW 100 ; 定义一个字变量var1,其值为100 C中 unsigned integer var1=100; null三、伪指令null三、伪指令段定义伪指令(SEGMENT/ENDS) 段名 SEGMENT [定位类型][组合类型][字长类型][‘类别’] . . [段名] ENDSASSUME 段寄存器:段名,段寄存器:段名,… 指出哪个段用哪个段寄存器为了汇编程序把不同的段与模块连接null三、伪指令1.段名 该段名字,用来指出汇编程序为该段分配的存储区起始位置。 2.定位类型(指定该段起始地址边界值的类型) (1)BYTE:表示本段起始地址可以从任一地址处开始存放。 (2)WORD:表示本段要从一个偶数地址处开始存放,即段起始地址的最低一位必须是0。 (3)DWORD:表示本段要从4倍地址处开始存放,即段起始地址的最低二位必须是0。 (4)PARA:表示本段必须从能被16倍地址处开始存放,即段起始地址最低四位必须是0。 (5) PAGE:表示本段要从能被256倍地址处开始存放,即起始地址的最低八位必须是0。 null三、伪指令3.组合类型(用来告诉连接程序link.exe,本段与其它模块中同名段的组合连接关系) 有六种类型可供选择。 (1)“不选择” (2)PUBLIC:连接时,把与该段名相同的段连接在一起。 (3)STACK:指定该段为堆栈段的一部分 (4)COMMON:指定该段与其它同名的段有相同的段起始地址。 (5)MEMORY:指定该段将分配在所有其它段的前面(高地址)。 (6)PRIVATE: 该段为独立段,不与其它同名段合并。 (7)AT 表达式:用于指定由表达式值所确定的段所在的起始地址。不能用于代码段。 null三、伪指令4.字长类型(用于386以上,用来说明使用16位寻址方式或32位寻址方式) (1)USE16:使用16位寻址方式。 (2)USE32:使用32位寻址方式。 null三、伪指令5.类别(连接时,连接程序会把类别相同的所有段放在连续的内存区域中) ‘DATA’ :段类别是数据段。 ---DS ‘CODE’ :段类别是代码段。 ---CS ‘STACK’ :段类别是堆栈段。 ---SS ‘EXTRA’ :段类别是附加数据段。---ESnull三、伪指令对连接程序进行连接后存储区各段相对位置分布。 DATA1 SEGMENT ‘DATA’ CODE SEGMENT ‘CODE’ STACK1 SEGMENT ‘STACK’ DATA2 SEGMENT ‘DATA’ STACK2 SEGMENT ‘STACK’ 经连接程序连接后,各段的相对位置如下: DATA1 SEGMENT ‘DATA’ DATA2 SEGMENT ‘DATA’ STACK1 SEGMENT ‘STACK’ STACK2 SEGMENT ‘STACK’ CODE SEGMENT ‘CODE’null三、伪指令【例】有两个模块,各模块段定义如下: 模块1: ┆ DATA1 SEGMENT PARA PUBLIC ‘DATA1’ M1 DB 45H DUP(0) DATA1 ENDS DATA2 SEGMENT PARA COMMON ‘DATA2’ N1 DB 102H DUP(0) DATA2 ENDS END null三、伪指令模块2: ┆ DATA1 SEGMENT PARA PUBLIC ‘DATA1’ M2 DB 104H DUP(11H) DATA1 ENDS DATA2 SEGMENT PARA COMMON ‘DATA2’ N2 DB 105H DUP(0) DATA2 ENDS DATA3 SEGMENT T1 DB 50 DUP(20H) DATA3 ENDS END null三、伪指令模块1、模块2连接后段的定位组合方式示意图null三、伪指令ASSUME 段寄存器:段名,段寄存器:段名,… 假定伪指令 (ASSUME) --段分配伪指令功能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。ASSUME CS:CODE, DS:DATA1, ES:DATA3, SS:DATA2nullDATA1 SEGMENT ‘DATA’ … DATA1 ENDS DATA2 SEGMENT ‘STACK’ … DATA2 ENDS DATA3 SEGMENT ‘DATA’ … DATA3 ENDS CODE SEGMENT ‘CODE’ ASSUME CS:CODE, DS:DATA1, ES:DATA3, SS:DATA2 START: MOV AX, DATA1 MOV DS, AX MOV AX,DATA2 MOV SS,AX MOV AX,DATA3 MOV ES,AX … CODE ENDS END START三、伪指令指定哪个段用哪个段寄存器给段寄存器装入值,CS由系统自动装入定义了 二个数据段, 一个堆栈段, 一个代码段null三、伪指令段组定义伪指令 (GROUP) 段组名 GROUP 段名,段名,… 功能:将GROUP后段名所指定的段分配在同一个物理存储器段中,分给该段一个段组名。nullDATA1 SEGMENT ‘DATA’ … DATA1 ENDS DATA2 SEGMENT ‘DATA’ … DATA2 ENDS AA5 GROUP DATA1, DATA2 CODE SEGMENT ‘CODE’ ASSUME CS:CODE, DS:AA5 START: MOV AX, AA5 MOV DS, AX … CODE ENDS END START三、伪指令定义了二个数据段,一个代码段null三、伪指令地址计数器伪指令 (ORG,EVEN,ALIGN) 地址计数器(偏移计数器) $ :本指令地址 --MASM5.0, emu8086支持 ORG 表达式 --设置地址计数器IP EVEN --使下一变量或指令开始于偶数地址。 ALIGN n --使下一变量或指令开始于n的整数倍地址。 N=2,4,8,16,… null三、伪指令数据定义伪指令 (DB,DW,DD,DF,DQ,DT) [变量名] 操作符 操作数,操作数,… [;注释] 功能:为操作数分配存储单元,并用变量名与存储单元相联系。常数 表达式 字符串 DB --1 字节(字节),定义字节变量 DW --2 字节(字), 定义字 变量 DD --4 字节(双字),定义双字变量 DF --6 字节(三字),定义三字变量 DQ --8 字节(四字),定义四字变量 DT --10字节(五字),定义五字变量 null三、伪指令常数、表达式ORG 200H DATA1 DB 12H, 2+6,34H EVEN ;下一个从偶数地址开始 DATA2 DW 789AH ALIGN 4 ;下一个从4倍地址开始 DATA3 DD 12345678H DATA4 DW $,6699Hnull三、伪指令字符串ORG 100H DATA1 DB ‘abcd’ DATA2 DB ‘AB’ DATA3 DW ‘AB’null三、伪指令?ORG 400H DATA1 DB 1,2,?,4 DATA2 DW 5,?,6 DATA3 DF ? DATA4 DB 8null三、伪指令n DUP()ORG 300H DATA1 DB 2 DUP(12H,34H,56H)如何定义一个数组?Duplicationnull三、伪指令过程定义伪指令(PROC/ENDP) 过程名 PROC [属性] . . . 过程名 ENDPNEAR—近调用(段内) FAR—远调用(段间)用CALL 过程名调用此过程null三、伪指令模块连接伪指令(PUBLIC,EXTRN) PUBLIC 符号1 [,符号2,…]1.PUBLIC全局符说明伪指令功能:全局符号定义,其它模块可使用。EXTRN 符号1:类型 [,符号2:类型,…]2.EXTRN外部符说明伪指令功能: 其它模块用PUBLIC定义的,本模块要引用的符号。符号可以是:常量、变量、标号、过程名。BYTE WORD DWORD FWORD QWORD TBYTE ABS (用EQU定义的常量) NEAR FAR(标号,过程名)null四、操作数字段常数数值常数 2.字符串常数 3.符号常数12ABH 2376Q 01011100B 4567D , 4567‘A’ ‘AbCd’DATA1 EQU 88 NEW-CX EQU CX DATA2 EQU DATA1+2 DATA1 = 88 DATA1 = DATA1+99(1)符号常数名 EQU 表达式 (2)符号常数名 = 表达式null四、操作数字段表达式把常数、寄存器、标号、变量与运算符组合。 数字表达式、地址表达式运算符 (1)算术运算符:+ - * / MOD 2+5 ,17/7 ,17 MOD 7 (2)逻辑运算符:AND OR XOR NOT (3)移位运算符:SHL SHR MOV AL, BL SHR 3 MOV CL,BL SHL 6null四、操作数字段(4)关系运算符:(true=0FFFFH,false=0) > >= < <= = = GT GE LT LE EQ NE (5)返回值运算符: 1) SEG 变量/标号 2) OFFSET 变量/标号 3) TYPE 变量/标号 对变量:返回变量的字节数,DB为1,DW为2,DD为4,DF为6,DQ为8,DT为10. 对标号:返回地址的类型,NEAR为-1 ,FAR为-2. 4) LENGTH 变量 变量中无DUP时,返回1;有DUP时返回由类型所定的单元数。 5) SIZE 变量 返回变量的字节数(LENGTH*TYPE)null四、操作数字段(6)属性运算符: 1)类型 PTR 变量/标号 对变量: 类型为BYTE, WORD,DWORD, FWORD,QWORD,TBYTE. 对标号:类型为 NEAR ,FAR. DATA1 DW 1234H,5678H DATA2 DB 99H,88H,77H,66H DATA3 EQU BYTE PTR DATA1 MOV AX, WORD PTR DATA2 ;8899H MOV BL, BYTE PTR DATA1 ;34H MOV DX, DATA1+2 ;5678H MOV [BX], 8 MOV BYTE PTR [BX], 8 MOV WORD PTR [BX], 8null四、操作数字段(6)属性运算符: 2) 变量/标号 EQU THIS 类型 对变量: 指定变量类型为BYTE, WORD,DWORD, FWORD,QWORD,TBYTE. 对标号:指定标号类型为 NEAR ,FAR. 为声明一个变量/标号,但不分配存储区。 DATA1 EQU THIS BYTE DATA2 DW 1234H,5678H MOV AX, DATA2 ;1234H MOV BL, DATA1 ;34H MOV BH, DATA1+1 ;12H AA1 EQU THIS FAR AA2: MOV AX,100HDATA1 DATA2地址相同AA1 AA2地址相同null四、操作数字段(6)属性运算符: 3) 变量/标号 LABEL 类型 对变量: 定义变量类型为BYTE, WORD,DWORD, FWORD,QWORD,TBYTE. 对标号:定义标号类型为 NEAR ,FAR。与PTR相同。 AA1 LABEL FAR ;远调用入口 AA2: MOV AX, 00H ;近调用入口 AA3 LABEL BYTE AA4 DW 1234H, 5678H MOV AX, AA4 ;1234H MOV BH, AA3+1 ;12HAA1 AA2地址相同AA3 AA4地址相同null四、操作数字段(7)运算符的优先级p150 null四、操作数字段2. 数字表达式 把常数、标号、变量与运算符组合。运算符可以是算术运算符、逻辑运算符、移位运算符、关系运算符、返回值运算符,但结果必须是常数。AAA1 EQU X DATA1 DB 12H, 34H, 56H, 78H AAA2: MOV AX, LENGTH DATA1 ; mov ax,1 无DUP返回1 MOV BX, TYPE AAA2 ;-1 near MOV DX, (AAA1 LT 3 AND 10H OR AAA1 GE 3 AND 0AFH )SHL 2 ;40H,0BCHnull四、操作数字段 3. 标号 指令存放单元的符号地址。在代码段中定义,标号后一定要有:。 标号属性:段、偏移、类型。 null四、操作数字段 4.变量 数据存放单元的符号地址。数据段或附加段中定义。 变量属性:段、偏移、类型、单元数、字节数。 null四、操作数字段 5. 地址表达式 (1)变量/标号 +/- 数据表达式 ,只改变地址偏移量 (2)变量-变量 标号-标号 结果为相对位移 (3)[寄存器 +/- 数据表达式]可以 [寄存器 +/- 变量/标号] 不可以 MOV AX, [BX+SI+8] MOV AX, [BX+SI]8 MOV AX, 8[BX+SI] MOV AX, [BX][SI]8 null五、汇编语言源程序的结构 Windows中可执行文件有:.COM,.EXE,.DLL,.bat, .ocx…1)COM --可执行二进制代码文件: 程序只占一个段,64KB。PSP+代码 占一个段中。 磁盘文件开始直接就是执行代码。无独立的堆栈段。加载后PSP头长度256字节, CS=DS=SS,IP=100h,SP=0FFFEh,范围0000~0FFFFH。 2)EXE --可执行的浮动代码文件 : 程序占有多个段,DS数据段、CS代码段、ES数据段、SS堆栈段占独立段,程序加载时再定位各段。磁盘中EXE文件有512字节头信息(控制信息块)。加载后PSP头长度256字节, DS=ES指向PSP头; CS、SS指向程序中的段,需要重置DS、ES指向自己的数据段 。 3)DLL--动态链接库: 一个EXE可以运行中加载、卸载其它的DLL。(360与TX大战,程序升级…) 4)Bat --批处理文件: 成批运行DOS命令脚本。null五、汇编语言源程序的结构 1.COM源程序结构;------0主程序开始------------- org 100h ;!主程序代码 RET ;返回DOS ;------1 子过程开始------------- P_Name PROC NEAR ;!子过程代码 RET P_Name ENDP ;------2 定义变量------------- X DB … Y DW … Emu8086环境 CODE SEGMENT ;------0主程序开始------------- ORG 100H ASSUME CS:CODE,DS:CODE START : ;!主程序代码 RET ;返回DOS ;------1 子过程开始------------- P_Name PROC NEAR ;!子过程代码 RET P_Name ENDP ;------ 2定义变量------------- X DB … Y DW … CODE ENDS END STARTMASM.exe Link.exe EXE2BIN.EXE---把EXE变成COM文件 MASM 5.0、 Emu8086环境 null五、汇编语言源程序的结构 COM程序例子:;------0主程序开始------------- org 100h LEA BX, BUF MOV CX, 7 CALL display RET ;返回DOS ;------1 子过程开始------------- display PROC NEAR next1: MOV DL,[BX] MOV AH, 2 INT 21H INC BX LOOP next1 RET display ENDP ;------2 定义变量------------- BUF DB 0AH, 0DH, 'ABCDE‘在CRT上显示ABCDE的程序 Emu8086环境 CODE SEGMENT ;------0主程序开始------------- ORG 100H ASSUME CS:CODE,DS:CODE START : MOV AX,CS MOV DS, AX LEA BX, BUF MOV CX, 7 CALL display RET ;返回DOS ;------1 子过程开始------------- display PROC NEAR next1 : MOV DL,[BX] MOV AH, 2 INT 21H INC BX LOOP next1 RET display ENDP ;------ 2定义变量------------- BUF DB 0AH, 0DH, 'ABCDE‘ CODE ENDS END STARTMASM 5.0、 Emu8086环境 null五、汇编语言源程序的结构 2.EXE源程序结构1;*****1.开始定义数据段*********************** DSEG SEGMENT 'DATA' X DB … Y DW … DSEG ENDS ;*****2.开始定义堆栈段*********************** SSEG SEGMENT STACK 'STACK' DW 100h DUP(?) ;自己的堆栈,够用就行. SSEG ENDS ;*****3.开始定义代码段*********************** ASSUME CS:CSEG,DS:DSEG,SS:SSEG CSEG SEGMENT 'CODE' ;------3.0 主过程开始--------------------------------- Main PROC FAR      PUSH DS ;返回地址入栈,与RET对应 MOV AX, 0 PUSH AX     MOV AX, DSEG ;指向自己的数据段DSEG MOV DS, AX     ;!主过程代码 RETF ;执行PSP头首位置的int 20H,返回DOS. Main ENDP ;------3.1 子过程开始--------------------------------- P_Name PROC NEAR ;!子程序代码 RET P_Name ENDP CSEG ENDS END Main ;开始进程是MainMASM 5.0、 Emu8086环境 或者 MOV AH, 4Ch INT 21h指向自己的数据段DSEG。DS原指向PSP,PSP第1字节位置压栈若用上边的代码结束,主过程开始3个指令可以不用。null五、汇编语言源程序的结构 2.EXE源程序结构2;*****1.开始定义数据段*********************** DSEG SEGMENT 'DATA' X DB … Y DW … DSEG ENDS ;*****2.开始定义堆栈段*********************** SSEG SEGMENT STACK 'STACK' DW 100h DUP(?) ;自己的堆栈,够用就行. SSEG ENDS ;*****3.开始定义代码段*********************** ASSUME CS:CSEG,DS:DSEG,SS:SSEG CSEG SEGMENT 'CODE' ;------3.0 主程序开始--------------------------------- Main: PUSH DS ;返回地址入栈,与RET对应 MOV AX, 0 PUSH AX     MOV AX, DSEG ;指向自己的数据段DSEG MOV DS, AX     ;!主程序代码 RETF  ;执行PSP头首位置的int 20H,返回DOS. ;------3.1 子过程开始--------------------------------- P_Name PROC NEAR ;!子程序代码 RET P_Name ENDP CSEG ENDS END Main ;开始进程是MainMASM 5.0、 Emu8086环境 或者 MOV AH, 4Ch INT 21hnull五、汇编语言源程序的结构 EXE程序例子:;*****1.定义数据段**************************** DSEG SEGMENT 'DATA' BUF DB 0AH,0DH,'ABCDE' DSEG ENDS ;*****2.定义堆栈段*************************** SSEG SEGMENT STACK 'STACK' DW 100h DUP(?) ;自己的堆栈,够用就行. SSEG ENDS ;*****3.定义代码段************************* ASSUME CS:CSEG,DS:DSEG,SS:SSEG CSEG SEGMENT 'CODE' ;------3.0 主过程开始--------------------------------- Main PROC FAR ; 与RET对应     PUSH DS ;返回地址入栈, MOV AX, 0 PUSH AX     MOV AX, DSEG ;设置当前使用的数据段DSEG MOV DS, AX LEA BX, BUF MOV CX, 7     CALL display RETF ;执行int 20H,返回DOS. Main ENDP ;------3.1 子过程开始--------------------------------- display PROC NEAR ;!!!在此加入你自己的代码!!! RET display ENDP CSEG ENDS END Main ;开始进程是Mainnext1: MOV DL,[BX] MOV AH, 2 INT 21H INC BX LOOP next1MASM 5.0、 Emu8086环境 null几点注意(变量名,地址标号名,过程名,段名)1.变量名,地址标号名,过程名 都是地址(相对所在段的偏移) 如用X_Name表示时:!取X_Name段地址 MOV BX,seg X_Name 取X_Name所在段的段值!取X_Name偏移地址 MOV BX,offset X_Name LEA BX, X_Name LEA BX,[X_Name] 三者等效!取X_Name变量值(DB类型时) MOV AL, X_Name MOV AL,[X_Name] 二者等效变量直接寻址2.段名,其值为段值(加载时重定位) 如用XSEG表示DSEG、CSEG、SSEG时:!取XSEG段地址 MOV BX,XSEG参见MASM5.0生成的.LST文件 nullMOV AL, X ;直接寻址 MOV AL,[X] ;直接寻址 二者等效 MOV AL, X+1 ;直接寻址 MOV AL,[X+1] ;直接寻址 二者等效几点注意(常量、变量名)3. 常量名 与 变量名 !常量N N EQU 200h … MOV AL,N ;立即寻址 MOV AL,[N] ;直接寻址 二者不同!取X变量值(DB类型时) X DB 20h, 30h, 40h, 50h nullMOV AL, X ;正确 MOV AL,[X] ;正确 二者等效 MOV AX, X ;!错误 MOV AX,[X] ;!错误 几点注意(数据传送等宽原则)4. 数据传送等宽原则!取X变量值(DB类型时) X DB 20h, 30h, 40h, 50h 数据传送等宽原则, 也就是类型要正确null 段 :偏移 机器指令 汇编指令 1671: 0215 BB MOV BX,$ ; $本指令开始位置地址偏移 1671: 0216 15 1671: 0217 02 等价于 MOV BX,0215h几点注意($符)5. $指令中的$数据中的$X DW 1234h, $, 5678h 1671: 0215 34 1671: 0216 12 1671: 0217 17 ;$所在位置的地址偏移 1671: 0218 02 1671: 0219 78 1671: 021A 56
/
本文档为【ch08-汇编语言程序格式2】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索