您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > chapter3汇编语言基础
1计算机科学系-汇编课件第3章汇编语言基础要点:1.汇编语言基本元素2.例子:三个整数相加3.编译、链接和运行程序4.定义数据5.符号常量2计算机科学系-汇编课件1.汇编语言的基本元素整数常量实数常量字符常量、字符串常量保留字标识符伪指令指令3计算机科学系-汇编课件1.1整数常量由符号(可选)开头,加上一个或多个数字以及一个表示数制基数的字符后缀(可选)构成:[{+|-}]digits[radix]–基数:h、q/o、d、b、r、t、y表达式()、+|-、*|/、MOD、+|-单目双目4计算机科学系-汇编课件1.1整数常量整数常量-2626d11011110b42q1Ah0A3h整数表达式4+5*212-1mod55计算机科学系-汇编课件1.2实数常量十进制实数[sign]integer.[integer][exponent]E[{+|-}]integer{+|-}例:1)2.2)+3.03)-44.2E+054)26.E56计算机科学系-汇编课件1.3字符、字符串常量以单引号或双引号可以嵌套‘A’“d”‘4096’“Goodnight,Gracie”“Thisisn’tatest”‘Say“Goodnight,”Gracie’7计算机科学系-汇编课件1.4保留字这些单词有特殊的意义,只能用于正确的上下文环境中:–指令助记符–伪指令–属性–运算符–预定义符号附录D8计算机科学系-汇编课件1.5标识符是程序员选择的名字,用来识别变量、常量、过程或代码标号:–1~247个字符–默认大小写不敏感–第一个:字母、下划线、@、$,后续可以有数字–不能与保留字相同命令行加-Cp可以使其大小写敏感尽量避免以@开头9计算机科学系-汇编课件1.6伪指令伪指令:源代码被编译时由编译器识别和执行的指令。用于定义逻辑段、选择内存模式、定义变量和创建过程等不区别大小写.code.dataPROCENDP10计算机科学系-汇编课件1.7指令指令时在程序被加载至内存并且开始运行后,在运行期由处理器执行的语句。–标号(可选)–指令助记符(必需)–操作数(通常需要)–注释(可选)标号:指令助记符操作数;注释11计算机科学系-汇编课件1.7.1标号标号是充当指令或数据位置标记的标识符。–代码标号:程序代码区(存放指令的地方)中的标号必须以冒号结尾。–数据标号:用于程序的数据区(定义变量的地方),不必用冒号结尾。target:movax,bx……jmptargetfirstBYTE1012计算机科学系-汇编课件1.7.2指令助记符指令助记符是一个简短的单词,用于标识某个指令要执行的操作。movaddsubmuljmpcall13计算机科学系-汇编课件1.7.3操作数一条汇编指令可以有0~3个操作数;每个操作数可以是寄存器、内存操作数、常量表达式或I/O端口。a)stcb)incaxc)movcount,bxd)shldax,bx,114计算机科学系-汇编课件1.7.4注释单行注释:“;”块注释:以COMMENT伪指令以及用户定义的符号开始COMMENT!Thislineisacomment.Thislineisalsoacomment.!COMMENT&Thislineisacomment.Thislineisalsoacomment.&15计算机科学系-汇编课件2.例子:三个整数相加减TITLEAddandSubtract(AddSub.asm);Thisprogramaddsandsubtracts32-bitintegersINCLUDEIrvine32.inc.codemainPROCmoveax,10000haddeax,40000hsubeax,20000hcallDumpRegsexitmainENDPENDmain调用一个显示cpu寄存器值的子程序调用MS-windows函数来终止程序,不是MASM的关键词,而是Irvine32.inc中定义的命令指示该行为汇编源程序的最后一行,main是指程序的入口函数.386.MODELflat,stdcall.STACK4096ExitProcessPROTO,dwExitCode:DWORDDumpRegsPROTO16计算机科学系-汇编课件2.2程序模板TITLEProgramTemplate(Template.asm);程序描述:;作者:;创建日期:;版本:;修改日期:修改者:INCLUDEIrvine32.inc.data;(在此插入变量).codemainPROC;(在此插入可执行代码)exitmainENDP;(在此插入其他子程序)ENDmain17计算机科学系-汇编课件3.编译、链接和运行程序源文件目标文件链接库列表文件输出可执行文件映像文件文本编辑器汇编编辑器链接器系统装载器18计算机科学系-汇编课件4.定义数据1.BYTE2.SBYTE3.WORD4.SWORD5.DWORD6.SDWORD7.FWORD8.QWORD9.TBYTE10.REAL411.REAL812.REAL1019计算机科学系-汇编课件4.1数据定义语句[名称]数据定义伪指令初始值[,初始值]…至少有一个初值或“?”可以是常量、表达式例子:value1BYTE‘A’value2BYTE0value3SBYTE-128value4SBYTE+127value5SWORD-32768value6WORD?1).datalist1BYTE10,20,30,402)list2BYTE10,20,30,40BYTE50,60,70,80BYTE81,82,83,843)list3BTYE10,32,41h,00100010blist4BYTE0Ah,20h,‘A’,22h定义未初始化的变量;这表示将由可执行指令在运行时为变量动态赋值多个初始值可以不同基数20计算机科学系-汇编课件4.1数据定义语句greatingBYTE“Goodafternoon”,0greating1\BYTE“WelcometotheEncryptionDemoprogram”BYTE“createdbyKipIrvine.”,0dh,0ah,BYTE“Ifyouwishtomodifythisprogram”BYTE“sendmeacopy.”,0dh,0ah,0回车换行符行延续符空字符NULL21计算机科学系-汇编课件4.1数据定义语句DUP操作符–使用一个常量表达式作为计数器来重复分配存储空间–常用于为字符串和数组分配空间1)list1BYTE20DUP(0);20字节,全部等于02)list2BYTE20DUP(?);20字节,未初始化3)list3BYTE4DUP(”STACK”);20字节:“STACKSTACKSTACKSTACK”4)arrayWORD5DUP(?)22计算机科学系-汇编课件4.1数据定义语句小尾顺序–变量的最低有效字节存储在地址值最小的地址单元中,其余字节在内存中按顺序连续存储val1DWORD12345678h785634120000000100020003.datalistWORD10,20,30,4010203040000000020004000623计算机科学系-汇编课件例子:三个整数相加改进TITLEAddandSubtract(AddSub2.asm);Thisprogramaddsandsubtracts32-bitintegersINCLUDEIrvine32.inc.dataval1DWORD10000hval2DWORD40000hval3DWORD20000hfinalValDWORD?.codemainPROCmoveax,val1addeax,val2subeax,val3movfinalVal,eaxcallDumpRegsexitmainENDPENDmain24计算机科学系-汇编课件5.符号常量通过将标识符(或符号)与整数表达式或文本联系起来而创建的;注意与变量的区别–不占用实际的存储空间–仅在编译期间使用,不能在运行期改变等号伪指令EQU伪指令TEXTEQU25计算机科学系-汇编课件1)等号伪指令格式:名字=表达式COUNT=500arrayCOUNTDUP(0)COUNT=5moval,COUNTCOUNT=10moval,COUNTCOUNT=100moval,COUNT可重复定义32位的整数值26计算机科学系-汇编课件2)EQU伪指令格式:1.nameEQUexpression2.nameEQUsymbol3.nameEQUtext例2:pressKeyEQU“Pressanykeytocontinue…”,0.datapromptBYTEpressKey例1:matrix1EQU10*10matrix2EQU10*10.dataM1WORDmatrix1M2WORDmatrix2必须是有效的整数表达式必须是已经用“=”或EQU定义过的符号名尖括号不能省略不能重复定义27计算机科学系-汇编课件3)TEXTEQU伪指令格式:1.nameTEXTEQUtext2.nameTEXTEQUtextmacro3.nameTEXTEQU%constExpr可以嵌套定义28计算机科学系-汇编课件3)TEXTEQU伪指令continueMsgTEXTEQU“Doyouwishtocontinue(Y/N)?.dataprompt1BYTEcontinueMsgrowSize=5countTEXTEQU%(rowSize*2)moveTEXTEQUmovsetupALTEXTEQUmoveal,count29计算机科学系-汇编课件计算数组和字符串的大小listBYTE10,20,30,40ListSize=($-list)listBYTE10,20,30,40var2BYTE20DUP(?)ListSize=($-list)listWORD1000h,2000h,3000h,4000hListSize=($-list)/2$:返回当前程序语句的地址偏移值
本文标题:chapter3汇编语言基础
链接地址:https://www.777doc.com/doc-3620836 .html