微机4-12上第2章(已学汇编).ppt

上传人:wuy****n92 文档编号:73246102 上传时间:2023-02-17 格式:PPT 页数:169 大小:1.64MB
返回 下载 相关 举报
微机4-12上第2章(已学汇编).ppt_第1页
第1页 / 共169页
微机4-12上第2章(已学汇编).ppt_第2页
第2页 / 共169页
点击查看更多>>
资源描述

《微机4-12上第2章(已学汇编).ppt》由会员分享,可在线阅读,更多相关《微机4-12上第2章(已学汇编).ppt(169页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第2章章 指令系统及汇编语言程序设计指令系统及汇编语言程序设计2.1 8088/8086的寻址方式的寻址方式2.2 8088/8086的指令系统的指令系统2.3 汇编语言汇编语言汇编语言源程序格式汇编语言源程序格式伪指令伪指令汇编语言源程序结构汇编语言源程序结构2.4汇编语言程序设计汇编语言程序设计 基本程序设计方法基本程序设计方法DOS功能调用功能调用顺序程序设计顺序程序设计分支程序设计分支程序设计循环程序设计循环程序设计子程序设计子程序设计本次课内容请请大大家家复复习习汇编语言汇编语言掌掌握握本本节节内内容容第二章复习小结第二章复习小结下次课下次课5.95.9汇编语言汇编语言单元考试单元

2、考试及讲第及讲第3 3章章2.3 汇编语言汇编语言汇编语言的特点汇编语言的特点汇汇编编语语言言是是一一种种以以处处理理器器指指令令系系统统为为基基础础的的低低级级程程序序设设计计语言,它采用助记符表达指令操作码语言,它采用助记符表达指令操作码利利用用汇汇编编语语言言编编写写程程序序的的主主要要优优点点是是可可以以直直接接、有有效效地地控控制制计计算算机机硬硬件件,因因而而容容易易创创建建代代码码序序列列短短小小、运运行行快快速速的的可执行程序可执行程序在在有有些些应应用用领领域域,汇汇编编语语言言的的作作用用是是不不容容置置疑疑和和无无可可替替代代的的汇编程序设计的过程是与其他高级语言程序设计

3、大致相同汇编程序设计的过程是与其他高级语言程序设计大致相同什么是汇编语言什么是汇编语言以助记符形式表示计算机指令以助记符形式表示计算机指令助助记记符符(mnemonic)是是便便于于人人们们记记忆忆、并并能能描描述述指指令令功功能能和和指指令操作数的符号令操作数的符号助记符是表明指令功能的英语单词或其缩写助记符是表明指令功能的英语单词或其缩写汇汇编编格格式式指指令令以以及及使使用用它它们们编编写写程程序序的的规规则则就就形形成成汇汇编编语语言(言(Assembly Language)汇编语言程序汇编语言程序:用汇编语言书写的程序:用汇编语言书写的程序汇汇编编程程序序:将将汇汇编编语语言言程程序

4、序“汇汇编编”成成机机器器代代码码目目标标模模块块的程序的程序 汇编语言程序与汇编程序是两个概念汇编语言程序与汇编程序是两个概念硬指令和伪指令硬指令和伪指令汇编程序汇编程序将将汇汇编编语语言言源源程程序序翻翻译译成成在在机机器器上上能能执执行行的的机机器器语语言言程序(程序(目的代码目的代码程序程序硬指令硬指令-执行性语句执行性语句使使CPU产产生生动动作作、并并在在程程序序执执行行时时才才处处理理的的语语句句,就就是是第第2章章学学习习的处理器指令的处理器指令与与具具体体的的处处理理器器有有关关、与与汇汇编编程程序序无无关关。汇汇编编后后对对应应一一条条指指令令代代码码伪指令(伪指令(Dir

5、ective)-说明性语句说明性语句不不产产生生CPU动动作作、在在程程序序执执行行前前由由汇汇编编程程序序处处理理的的说说明明性性语语句句,例如,数据说明、变量定义等等例如,数据说明、变量定义等等伪指令与具体的处理器类型无关,但与汇编程序的版本有关伪指令与具体的处理器类型无关,但与汇编程序的版本有关本课程采用微软宏汇编程序本课程采用微软宏汇编程序 MASM 6.15 硬指令和伪指令采用易于记忆的符合表达,这就是助记符一一.汇编语言源程序格式汇编语言源程序格式(4部分部分)标号标号 硬硬指令的位置指令的位置(逻辑地址逻辑地址),),后后加冒号加冒号:名字名字 伪伪指令的位置或存储单元名称指令的

6、位置或存储单元名称(变量名变量名),),后后不加不加冒号冒号:一般最多由一般最多由3131个字母、数字及规定的特殊符号(如个字母、数字及规定的特殊符号(如 _ _、$、?、)组成)组成不能以数字开头(如不能以数字开头(如 1ABC 1ABC错),不能是错),不能是保留字保留字指令助记符指令助记符 必须有必须有,其它其它3部分可无部分可无伪伪指令助记符指令助记符-伪伪指令指令硬硬指令助记符指令助记符-硬指令硬指令注释注释语句中由分号语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性开始的部分为注释内容,用以增加源程序的可读性必要时,一个语句行也可以由分号开始作为阶段性注释必要时,一个

7、语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理标号标号:硬硬指令助记符指令助记符 操作数操作数1,1,操作数操作数2 ;注释注释名字名字 伪指令助记符伪指令助记符 参数参数1,参数参数2,;注释注释例:例:硬指令硬指令 Done:mov al,02h 伪指令伪指令 Sum db 02h 标号标号 指令助记符指令助记符 操作数操作数 ;注释注释 保留字保留字保保留留字字(Reserved Word)是是汇汇编编程程序序已已经经利利用用的的标识符(也称为关键字),主要有:标识符(也称为关键字),主要有

8、:硬指令助记符硬指令助记符例如:例如:MOV、ADD伪指令助记符伪指令助记符例如:例如:DB、DW操作符操作符例如:例如:OFFSET、PTR寄存器名寄存器名例如:例如:AX、CS预定义符号预定义符号例如:例如:data 汇编语言大小写不敏感汇编语言源程序格式汇编语言源程序格式-操作数操作数操作数操作数 常数、数值表达式、寄存器、标号常数、数值表达式、寄存器、标号、变量等、变量等数值表达式数值表达式一般是指由一般是指由运算符运算符连接的各种常数所构成的表达式连接的各种常数所构成的表达式汇汇编编程程序序在在汇汇编编过过程程中中计计算算表表达达式式,最最终终得得到到一一个个确确定定的的数值,所以也

9、是常数数值,所以也是常数常用的常用的运算符运算符是加减乘除(是加减乘除(*/)例:例:mov ax,3*4+5;等价于;等价于mov ax,17汇编语言源程序格式汇编语言源程序格式-操作数操作数操作数操作数 常数、寄存器、标号常数、寄存器、标号、数值表达式、变量等、数值表达式、变量等常数常数 汇编时已确定的数据汇编时已确定的数据 如硬指令中立即数如硬指令中立即数二进制数二进制数 如如 MOV AL,10110101B十进制常数十进制常数 如如MOV AL,181十十六六进进制制数数常常数数 以以字字母母开开头头的的十十六六进进制制数数前前加加“0”。例例:MOV AL,0B5H字符和字符串常数

10、字符和字符串常数例例:MOV AX,AB ;AX4142h MOV AX,1 ;AX31h用用单单引引号号括括起起来来的的单单个个字字符符或或多多个个字字符符,其其数数值值是是每每个个字字符符对对应应的的ASCII码的值码的值.例如:例如:d=64H,AB=4142H符符号号常常数数 用用符符号号名名表表示示一一个个常常数数,可可以以提提高高程程序序的的可可读读性性,同同时时更更具具有通用性有通用性符号定义伪指令格式符号定义伪指令格式等价等价EQU伪指令伪指令 符号名符号名 EQU EQU 表达式表达式例:XY EQU 5等号等号=伪指令伪指令 符号名符号名=表达式表达式例:XY=5例例:XY

11、 EQU5 MOV AH,XY ;等价于等价于 MOV AH,5二二.伪指令伪指令1.符号符号(常量常量)定义伪指令定义伪指令 EQU符号常量使用符号名表达一个数值符号常量使用符号名表达一个数值格式格式 符号名符号名 EQU 表达式表达式 例例X EQU 7 2.变量定义伪指令(变量定义伪指令(定义数据伪指令定义数据伪指令)变量定义伪指令变量定义伪指令为为变变量量申申请请固固定定长长度度的的存存储储空空间间,同同时时将将相相应应存存储储单单元元初初始始化化(参参数数为为?则则不不初始化)。格式为:初始化)。格式为:变量名变量名 DB/DW/DD/DQ 参数参数1 1,参数,参数2 2,DB(或

12、或BYTE)定义字节定义字节 其后每个参数占其后每个参数占1 1个字节个字节存储单元存储单元DW(或或WORD)定定义义字字 其其后后每每个个参参数数占占2 2个个字字节节(先先低低字字节节后后高高字字节节)存存储单元储单元DD(或或DWORD)定义双字定义双字 其后每个参数占其后每个参数占4 4个字节个字节存储单元存储单元DQ(或或QWORD)定义定义4 4个字个字 其后每个参数占其后每个参数占8 8个字节个字节存储单元存储单元多个存储单元如果初值相同,可以用复制操作符多个存储单元如果初值相同,可以用复制操作符DUP进行定义:进行定义:重复次数重复次数 DUP(重复参数重复参数)变变量量实实

13、质质指指内内存存单单元元的的数数据据,变变量量需需要要事事先先定定义义才才能能使使用用.定定义义后后的的变变量量可可用用变量名等引用其中的数据,即变量的数值变量名等引用其中的数据,即变量的数值例:例:alphabyte30h,2 DUP(55H),34h,?,?movcx,alpha ;cx5530h movbx,offset alpha moval,bx+3 ;al34h 变量定义伪指令最常使用变量定义伪指令最常使用字节变量定义实例字节变量定义实例;数据段;数据段X db 61h,0fbh db 2 dup(64h),?Y db ABC应用应用mov al,Xdec X+1mov Y,alA

14、SCII a=61h A=41h B=42h C=43hASCII a=61h A=41h B=42h C=43h;此处;此处X表示它的第表示它的第1个数据,故个数据,故AL61h;对;对X为始的第为始的第2个数据减个数据减1,故为,故为0fah;Y=al=61h,现在现在Y这个字符串成为这个字符串成为 aBC实例实例程序如下程序如下countdb 80h,B,?maxintequ 04hnumberdw maxintarraydb maxint dup(3)mov cx,countdecbyte ptr arraymovbx,offset numbermovah,bx+2moval,bx-2

15、hlt 问问:程序执行后程序执行后ax=?cx=?存储单元存储单元33-1=2array0004H number-B=42H80Hcount答案答案:cx=4280h ah=2 al=42h字变量定义实例字变量定义实例;数据段;数据段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw maxint dup(0)ASCII A=41h B=42h ASCII A=41h B=42h ;数据段;数据段 字变量和字常量的定义:字变量和字常量的定义:WNUM EQU 5678H ;定义定义WNUM为常量为常量COUNT DW 20H ;定定义义C

16、OUNT变变量量,假假设设在在数数据据段段的的偏偏移移地地址为址为0010H;代码段代码段 字变量和字常量的应用:字变量和字常量的应用:MOV AX,BX+SI+WNUM 等价于等价于 MOV AX,BX+SI+5678H MOV AX,COUNT等价于等价于 MOV AX,0010H;AX0020HMOV AX,SI+COUNT等价于等价于 MOV AX,SI+0010H LEA BX,COUNT等价于等价于 LEA BX,0010H ;BX 0010HMOV BX,OFFSET COUNT等价于等价于 MOV BX,0010H ;BX 0010H字变量和字常量字变量和字常量实例实例3.宏(

17、宏(Macro)命令伪指令)命令伪指令为为简简化化程程序序编编制制,对对多多次次使使用用的的程程序序,既既可可用用子子程程序序也也可可用宏指令、宏汇编实现用宏指令、宏汇编实现宏定义宏定义 宏是具有宏命令名的一段汇编语句序列宏是具有宏命令名的一段汇编语句序列宏命令名宏命令名 MACRO 形参数形参数1,参数,参数2,;宏定义体(硬指令、伪指令);宏定义体(硬指令、伪指令)ENDM宏调用宏调用 宏命令名宏命令名 实参数实参数1,参数,参数2,宏宏需需要要先先定定义义,然然后后才才可可在在程程序序中中宏宏调调用用,形形式式上上类类似似其其他他指指令令,常常称称其为其为宏指令宏指令宏宏指指令令实实际际

18、上上是是一一段段代代码码序序列列的的缩缩写写。在在汇汇编编时时,宏宏指指令令被被汇汇编编程程序序用用对应的代码序列替代,这就是对应的代码序列替代,这就是宏展开宏展开因为是在汇编过程中实现的因为是在汇编过程中实现的宏展开宏展开,所以常称为,所以常称为宏汇编宏汇编宏命令伪指令实例:宏命令伪指令实例:*子程序设计子程序设计;主程序;主程序mov al,datacall dpchar;子程序;子程序 AL左移左移4位位dpchar procmovcl,4salal,cl retdpchar endp*宏调用宏调用mov al,datadpchar;宏定义:;宏定义:AL左移左移4位位dpchar ma

19、cromovcl,4salal,cl endmdpchar macro ;宏定义;宏定义movcl,4salal,cl endm .model small .stack .code .startupmov al,datadpchar ;宏调用;宏调用.exit 0end宏与子程序的比较宏与子程序的比较比较比较仅仅是是源源程程序序级级的的简简化化:宏宏调调用用在在汇汇编编时时进进行行程程序序语语句句的的展展开开,不不需需要要返返回回;不不减减小小目目标标程程序序,执执行行速速度没有改变度没有改变还还是是目目标标程程序序级级的的简简化化:子子程程序序调调用用在在执执行行时时由由CALLCALL指指

20、令令转转向向、RETRET指指令令返返回回;形形成成的的目目标标代代码码较较短短,执行速度减慢执行速度减慢宏宏子程序子程序三三.汇编语言的运算符汇编语言的运算符变量和标号的属性变量和标号的属性变变量量和和标标号号具具有有逻逻辑辑地地址址和和类类型型属属性性,汇汇编编程程序序提提供供有有关关的的操作符,以便获取这些属性值操作符,以便获取这些属性值变量例变量例 sum db 02h mov al,sum标号标号例例 done:mov al,02h Jmp done逻辑地址属性逻辑地址属性 取值运算符取值运算符SEG和和OFFSET变量和标号对应存储单元的逻辑地址变量和标号对应存储单元的逻辑地址逻辑

21、地址包含逻辑地址包含:段地址和偏移地址段地址和偏移地址例:例:mov ax,offset sum类型属性类型属性 属性运算符属性运算符PTR变变量量名名的的类类型型可可以以是是BYTE(字字节节)、WORD(字字)和和DWORD(双双字)等;字)等;标标号号、段段名名、子子程程序序名名的的类类型型可可以以是是NEAR(近近)和和FAR(远远),分分别别表示段内或段间调用表示段内或段间调用例:例:dec word ptr sum取值运算符取值运算符SEG和和OFFSET取得名字或标号的段地址和偏移地址取得名字或标号的段地址和偏移地址OFFSET 名字名字/标号标号返回名字或标号的偏移地址返回名字

22、或标号的偏移地址例:例:mov ax,offset alphaSEG 名字名字/标号标号返回名字或标号的段地址返回名字或标号的段地址例:例:Alpha db30h,33hmovbx,offset alphamoval,bx+1 movcx,bx;al33h;cx3330h属性运算符属性运算符PTR对名字或标号的类型属性进行设置对名字或标号的类型属性进行设置类型名类型名 PTR 名字名字/标号标号类类型型名名可可以以是是BYTE、WORD、DWORD(依依次次表表示示字字节节、字字、双双字字)等等,或或者者是是NEAR、FAR(分分别别表表示示近近、远远)定定义义的类型的类型 例:例:mov a

23、l,byte ptr var;var是一个字节变量是一个字节变量 jmp far ptr label;label是一个标号是一个标号 dec word ptr di inc byte ptr di使用使用PTRPTR操作符,可以临时改变名字或标号的类型操作符,可以临时改变名字或标号的类型8088CPU的存储格式的存储格式-小端存储方式小端存储方式D7D0字节字节D15D0字字D31D0双字双字00006H78H00005H56H00004H12H00003H34H00002H00001H00000H低地址低地址LSBMSB00002H00002H单元的内容为:单元的内容为:00002H=34H

24、00002H=34H00002H“00002H“字字”单元的内容为:单元的内容为:00002H=1234H00002H=1234H00002H00002H号号“双字双字”单元的内容为:单元的内容为:00002H=78561234H00002H=78561234H多字节数据在存储器中占连续的多个存储单元多字节数据在存储器中占连续的多个存储单元存放存放:低字节存入低地址,高字节存入高地址:低字节存入低地址,高字节存入高地址表达表达:用低地址表示多字节数据占据的地址空间:用低地址表示多字节数据占据的地址空间同一个存储器地址可以是字节单元地址、字单元同一个存储器地址可以是字节单元地址、字单元地址、双字

25、单元地址等等地址、双字单元地址等等 设设设设DS=0DS=000002H“双字双字”单元单元 MOV MOV EAXEAX,0002H,0002H00002H“字字”单元单元 MOV MOV AXAX,0002H,0002H00002H单元单元 MOV MOV AHAH,0002H,0002H高地址高地址存储单元存储单元存储单元存储单元D7 D0存储器地址存储器地址存储器地址存储器地址四四.汇编语言源程序结构汇编语言源程序结构完整的汇编语言源程序由段组成完整的汇编语言源程序由段组成一一个个汇汇编编语语言言源源程程序序可可以以包包含含若若干干个个代代码码段段、数数据据段段、附附加加段段或或堆堆栈

26、栈段段,段段与与段段之之间间的的顺顺序序可可随随意排列意排列需需独独立立运运行行的的程程序序必必须须包包含含一一个个代代码码段段,并并指指示示程序执行的程序执行的起始点起始点,一个程序只有一个起始点,一个程序只有一个起始点所所有有的的硬硬指指令令语语句句必必须须位位于于某某一一个个代代码码段段内内,伪伪指令语句可根据需要位于任一段内指令语句可根据需要位于任一段内通常,程序还需要一个堆栈段通常,程序还需要一个堆栈段 源程序由语句序列构成汇汇编编语语言言翻翻译译器器(汇汇编编程程序序,如如MASM)对对源源程程序序有严格格式要求有严格格式要求,才能将之翻译成目的代码才能将之翻译成目的代码段寄存器及

27、逻辑段分配段寄存器及逻辑段分配汇编语言源程序格式汇编语言源程序格式源程序分别用两种格式书写源程序分别用两种格式书写v第一种格式从第一种格式从MASM 5.0开始支持开始支持简化段定义格式简化段定义格式v第二种格式第二种格式MASM 5.0以前就具有以前就具有完整段定义格式完整段定义格式(一般了解一般了解)求较大值求较大值两无符号数两无符号数AX、BX的的较大值放入较大值放入 wmax例例:程序功能程序功能简单简单,要求掌握要求掌握求较大值求较大值两无符号数两无符号数AX、BX的较大值放入的较大值放入wmax 汇汇编编语语言言程程序序实实例例wmaxdw 0cmp ax,bx;比较;比较AX和和

28、BXjnc next;若;若AXBX,转移,转移xchg ax,bx;若;若AXBX,交换,交换next:mov wmax,ax简化段定义格式简化段定义格式求较大值求较大值两无符号数两无符号数AX、BX的较大值放入的较大值放入wmax.model small.data;定义数据段定义数据段wmaxdw 0.code;定义代码段定义代码段start:mov ax,data;程序起始点,建立程序起始点,建立DSmov ds,ax cmp ax,bx;比较;比较AX和和BXjnc next;若;若AXBX,转移,转移xchg ax,bx;若;若AXBX,交换,交换next:mov wmax,ax.e

29、xit 0;程序正常执行结束程序正常执行结束end start;汇编结束汇编结束程程程程序序序序数据数据数据数据定义定义定义定义汇汇编编语语言言程程序序实实例例stacksegment stack;定义堆栈段定义堆栈段dw 512 dup(?);堆栈段有堆栈段有512字(字(1024字节)空间字节)空间stackends;堆栈段结束堆栈段结束datasegment;定义数据段定义数据段wmax dw 0dataendscodesegment code;定义代码段定义代码段assume cs:code,ds:data,ss:stackstart:mov ax,data;建立建立DS段地址段地址m

30、ov ds,axcmp ax,bx;比较;比较AX和和BXjnc next;若;若AXBX,转移,转移xchg ax,bx;若;若AXBX,交换,交换next:mov wmax,axmov ax,4c00hint 21h;利用功能调用返回利用功能调用返回DOScodeends;代码段结束代码段结束end start;汇编结束,同时指明程序起始点汇编结束,同时指明程序起始点例:完整段定义格式完整段定义格式完整段定义格式程序例题程序例题stacksegment stackdw 512 dup(?)stackendsdatasegment;数据定义(数据待填)数据定义(数据待填)dataendsco

31、desegment codeassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,ax;主程序(指令待填)主程序(指令待填)mov ax,4c00hint 21h;子程序(指令待填)子程序(指令待填)codeendsend start完整段定义格式完整段定义格式 MASM 5.x支持支持源程序格式源程序格式 (一般了解一般了解)例题例题或者源程序格式或者源程序格式 (重点掌握重点掌握).model small ;定义程序的存储模式定义程序的存储模式.data ;定义数据段定义数据段 ;在数据段定义数据在数据段定义数据.code ;定义代码

32、段定义代码段start:mov ax,data;程序起始点,设置数据段段地址程序起始点,设置数据段段地址DSmov ds,ax ;主程序(指令待填)主程序(指令待填).exit 0 ;程序结束点,返回程序结束点,返回DOS ;子程序(指令待填)子程序(指令待填)end start ;汇编结束汇编结束温馨提示:温馨提示:可以可以无数据段无数据段常用常用简化段定义格式简化段定义格式 MASM 6.x支持支持例题例题1.简化段定义格式简化段定义格式 (1)源程序格式源程序格式 数据段定义伪指令数据段定义伪指令.DATA创建一个数据段创建一个数据段代码段定义伪指令代码段定义伪指令.CODE创建一个代码

33、段创建一个代码段堆栈段由堆栈段由Windows维护,用户不必设置维护,用户不必设置程序开始执行的位置程序开始执行的位置应用一个标号(例如:应用一个标号(例如:START)汇编结束汇编结束END指令的参数指令的参数应用程序执行结束应用程序执行结束语句语句“EXIT 0”将控制权交还操作系统将控制权交还操作系统提供给操作系统一个返回代码提供给操作系统一个返回代码通常用通常用0表示执行正确表示执行正确源程序汇编结束源程序汇编结束END语句语句执行结束执行结束汇编结束汇编结束.model small;定义程序的存储模式定义程序的存储模式.data;定义数据段定义数据段.code;定义代码段定义代码段.

34、exit 0;程序结束点,返回程序结束点,返回DOSend ;汇编结束汇编结束(2)简化段定义格式伪指令简化段定义格式伪指令;主程序主程序mov al,04hmov al,04h;提供参数;提供参数ALALcall htoasccall htoasc;调用子程序;调用子程序 retp1:mov bl,0fh;retp1 retp1:mov bl,0fh;retp1为返回地址为返回地址hlthlt;子程序子程序:将:将ALAL低低4 4位的一位位的一位1616进制数转换成进制数转换成ASCIIASCII码码htoasc:htoasc:and al,0fhand al,0fh;只取;只取alal的

35、低的低4 4位位or al,30hor al,30h;alal高高4 4位变成位变成3 3cmp al,39hcmp al,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh0Fhjc htendjc htendadd al,7add al,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htend:htend:retret;子程序返回;子程序返回ASCII码码 0=30h0=30h 9=39h 9=39h A=41h A=41h B=42h B=42h ACII码转换子程序调用程序码转换子程序调用程序.model small;定义程序的存储模式定义程序的存储模式.code;定义代码

36、段定义代码段start:mov ax,data ;程序起始点,建立程序起始点,建立DSmov ds,ax mov al,04hmov al,04h;提供参数;提供参数AL AL call call htoaschtoasc;调用子程序;调用子程序retp1:retp1:mov bl,0fh mov bl,0fh;retp1;retp1为返回地址为返回地址hlthlt.exit 0;程序正常执行结束程序正常执行结束htoaschtoasc:;子程序子程序将将ALAL低低4 4位位转换转换成成ASCIIASCII码码and al,0fhand al,0fh;只取;只取alal的低的低4 4位位or

37、 al,30hor al,30h;alal高高4 4位变成位变成3 3cmp al,39hcmp al,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh0Fhjc htendjc htendadd al,7add al,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htend:htend:retret;子程序返回;子程序返回end start;汇编结束汇编结束简化段定义格式简化段定义格式-例例1 ACII码转换子程序调用程序码转换子程序调用程序无数据段无数据段主主主主程程程程序序序序子子子子程程程程序序序序编程实现将编程实现将sum开始的开始的8个无符号数的和放至个无符号数的和放

38、至bpt开始的两个存储单元中开始的两个存储单元中;数据段数据段sumdb 8 dup(2)bptdw?;存放最大值存放最大值;代码段代码段 movmovcx,8cx,8movmovsi,offset sum si,offset sum ;存放存放存放存放无符号数的存储单元首地址赋给无符号数的存储单元首地址赋给sixorxorax,ax ax,ax ;axax及进位及进位及进位及进位CFCF清零清零清零清零done:done:addaddal,sial,siadcadcah,0ah,0incincsi si ;指向下一个指向下一个指向下一个指向下一个无符号数的存储单元地址无符号数的存储单元地址

39、loop done loop done ;cx-1cx-1 0 0 转向转向转向转向donedonemovmovbx,offset bpt bx,offset bpt;cx-1;cx-1=0 0(8个无符号数已求完和个无符号数已求完和)bxbxbpt bpt 偏移地址偏移地址偏移地址偏移地址 mov bx,ax mov bx,ax ;则将此和放至则将此和放至bpt存储单元存储单元hlthlt循环程序结构循环程序结构loop简化段定义格式简化段定义格式-例例2编程实现将编程实现将sum开始的开始的8个无符号数的和放至个无符号数的和放至bpt开始的两个存储单元中开始的两个存储单元中.model s

40、mall.data;定义数据段定义数据段sumdb 8 dup(2)bptdw?;存放最大值存放最大值.code;定义代码段定义代码段start:mov ax,data;程序起始点,建立程序起始点,建立DSmov ds,ax movmov cx,8cx,8movmov si,offset sum si,offset sum ;存放存放存放存放无符号数的存储单元首地址赋给无符号数的存储单元首地址赋给sixorxorax,ax ax,ax ;ax;ax及进位及进位及进位及进位CFCF清零清零清零清零done:done:addadd al,sial,siadcadcah,0ah,0incincsi

41、si ;指向下一个指向下一个指向下一个指向下一个无符号数的存储单元地址无符号数的存储单元地址Loop done Loop done ;cx-1 0;cx-1 0 转向转向转向转向donedone movmov bx,offset bpt bx,offset bpt ;cx-1=0;cx-1=0(8个无符号数已求完和个无符号数已求完和)bxbxbpt bpt 偏移地址偏移地址偏移地址偏移地址 mov bx,ax mov bx,ax ;则将此和放至则将此和放至bpt存储单元存储单元 hlt hlt .exit 0;程序正常执行结束程序正常执行结束end start;汇编结束汇编结束程程程程序序序序

42、数据数据数据数据定义定义定义定义2.4汇编语言程序设计汇编语言程序设计一一.汇编语言程序设计概述汇编语言程序设计概述汇编语言程序设计步骤汇编语言程序设计步骤从从实实际际问问题题抽抽象象出出数数学学模模型型,确确定定数数学学模模型型算算法法(如如乘乘法法用用移移位位指令指令 还是乘法指令还是乘法指令)画出画出程序流程图程序流程图 编程思路,程序结构和相互之间关系编程思路,程序结构和相互之间关系方框方框:工作框:工作框 例:菱形:判断框菱形:判断框编程、调试编程、调试形成文件形成文件判断程序质量判断程序质量程序执行时间程序执行时间程序所占内存字节数程序所占内存字节数程序语句条数程序语句条数程序可读

43、性程序可读性 结束结束 初始化初始化 循环体循环体 控制条件控制条件Y YN N二二.汇编语言程序设计的基本方法汇编语言程序设计的基本方法DOS功能调用功能调用汇编语言程序结构汇编语言程序结构顺序程序设计顺序程序设计分支程序设计分支程序设计循环程序设计循环程序设计子程序设计子程序设计1.DOS功能调用(书功能调用(书105页)页)DOS操操作作系系统统含含很很多多I/O子子程程序序,这这些些子子程程序序已已编编号号,可可由由汇汇编编语语言言源源程程序序调调用用。系系统统功功能能调调用用是是程序设计的一个重要方面程序设计的一个重要方面两种功能调用两种功能调用高级功能调用高级功能调用(DOS功能调

44、用功能调用)低级功能调用低级功能调用对对BIOS中的功能子程序的调用中的功能子程序的调用重点掌握重点掌握DOS功能调用功能调用:显示一个字符,显示一个字符,02H号功能调用号功能调用显示一个字符串,显示一个字符串,09H号功能调用号功能调用中断中断中中断断(Interrupt)是是又又一一种种改改变变程程序序执执行行顺顺序序的的方方法法,分分为为硬中断硬中断 外部设备外部设备 中断请求信号中断请求信号 INTR、NMI 软中断软中断 程序指令请求程序指令请求8088CPU支支持持256个个软软中中断断,每每个个中中断断用用一一个个编编号号(中中断断向量号)区别向量号)区别INT nINT n软

45、中断调用指令软中断调用指令,产生产生n n号中断号中断n n为为8 8位立即数,表示中断向量号位立即数,表示中断向量号掌掌握握类类似似子子程程序序调调用用指指令令CALL的的中中断断调调用用指指令令INT,进进而掌握而掌握系统功能调用系统功能调用 例:例:int 21h;产生产生21H号中断号中断中断向量号中断向量号 0255高级高级DOS功能调用功能调用高级高级DOS功能调用步骤功能调用步骤 AH系统功能系统功能调用号调用号(子程序号)(子程序号)指定寄存器中指定寄存器中设置入口参数设置入口参数 用中断指令用中断指令 INT 21h 执行功能调用执行功能调用 根据出口参数分析功能调用执行情况

46、根据出口参数分析功能调用执行情况01H号号DOS功能调用功能调用键盘输入键盘输入接收从键盘输入的一个字符并在显示器上显示该字符。接收从键盘输入的一个字符并在显示器上显示该字符。功能调用号:功能调用号:AH01H 入口参数:无入口参数:无 功能调用:功能调用:INT 21H 出口参数:出口参数:AL=输入字符输入字符例:显示键盘输入的一个字符并送例:显示键盘输入的一个字符并送in-buff存储单元存储单元;在数据段定义要显示的字符在数据段定义要显示的字符in-buff db?;在代码段编写程序在代码段编写程序mov ah,01h;设置功能调用号;设置功能调用号int 21h;功能调用;功能调用m

47、ov in-buff,al;缓存键盘输入字符;缓存键盘输入字符02H号号DOS功能调用功能调用显示一个字符显示一个字符 功能调用号:功能调用号:AH02H 入口参数:入口参数:DL欲显示字符的欲显示字符的ASCII码码 功能调用:功能调用:INT 21H 出口参数:无出口参数:无例:显示例:显示data中的一个字符中的一个字符;在数据段定义要显示的字符在数据段定义要显示的字符data dba ;在代码段编写程序在代码段编写程序mov ah,02h;设置功能调用号;设置功能调用号mov dl,a;设置入口参数;设置入口参数int 21h;功能调用;功能调用09H号号DOS功能调用功能调用显示一个

48、字符串显示一个字符串 功能调用号:功能调用号:AH09H 入口参数:入口参数:DS:DX欲显示字符串在内存中的首地址欲显示字符串在内存中的首地址(字符串以字符串以ASCII码形式保存,以码形式保存,以“$”结尾,结尾,$并不显示)并不显示)功能调用:功能调用:INT 21H 出口参数:无出口参数:无例:例:显示字符串显示字符串“Press any key to contiune”;在数据段定义要显示的字符串在数据段定义要显示的字符串msgkey dbPress any key to contiune,$;在代码段编写程序在代码段编写程序 mov ah,9;设置功能调用号;设置功能调用号 ;设置

49、入口参数设置入口参数 DX字符串的偏移地址字符串的偏移地址 mov dx,offset msgkey int 21h;功能调用;功能调用2.顺序程序设计顺序程序设计没没有有分分支支、循循环环等等转转移移指指令令的的程程序序,会会按按指指令令书书写的前后顺利依次执行,这就是顺序程序写的前后顺利依次执行,这就是顺序程序顺序结构是最基本的程序结构顺序结构是最基本的程序结构完全采用顺序结构编写的程序并不多见完全采用顺序结构编写的程序并不多见书书100页例题页例题2.1 顺序程序设计实例顺序程序设计实例3.分支程序设计分支程序设计分支程序根据条件是真或假决定执行与否分支程序根据条件是真或假决定执行与否判

50、判断断的的条条件件是是各各种种指指令令如如CMP、TEST等等执执行行后后形成的形成的状态标志状态标志转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制条件成立跳转,否则顺序执行分支语句体条件成立跳转,否则顺序执行分支语句体注意选择正确的条件转移指令和转移目标地址注意选择正确的条件转移指令和转移目标地址JccJcc条件满足?条件满足?条件满足?条件满足?分支语句体分支语句体分支语句体分支语句体Y YN N书书100页页例题例题2.2、例题例题2.3 课后读此程序课后读此程序例:例:显示显示BX的最高位的最高位方法一:分支程序设计方法一:分支程序设计mov dl,0;DL30H0s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁