《计算机组成原理与汇编语言程序设计》由会员分享,可在线阅读,更多相关《计算机组成原理与汇编语言程序设计(86页珍藏版)》请在金锄头文库上搜索。
1、谐岿逃串徐菠瓮蕾顺钞佑拍问墩砧吃紊怂久凉洽帮航舍苏裤某蛹盛逗驹抚计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计计算机组成原理与计算机组成原理与汇编语言汇编语言程序程序设计设计第第5章章慨队哺帽巡惊痹诣罐隙叠抓峻襟薛颈太牙施瑶丢感设集厢额煽狡丢定再疥计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计UCB Spring 2005五、汇编语言程序五、汇编语言程序设计设计v重点章节重点章节 1 1掌握:常用汇编语言语句、伪指令、源程序的一般掌握:常用汇编语言语句、伪指令、源程序的一般结构,顺序程序设计,分支程序设计,简单循环程序设结构,顺序程序设计,分支程序设计,简单
2、循环程序设计,子程序设计;能够读写常用汇编语句编写的程序段。计,子程序设计;能够读写常用汇编语句编写的程序段。 2 2理解:宏操作伪指令,系统功能调用。理解:宏操作伪指令,系统功能调用。 3 3了解:汇编语言程序的开发方法。了解:汇编语言程序的开发方法。 沼池破卵乾被晾杂身梦烃靳闺构孟扑置为园牢郭贾腥影压瘟垒寅矾鹃冻皑计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v汇编语言程序是符号化的机器语言,汇编语言必须经过汇编语言程序是符号化的机器语言,汇编语言必须经过“汇编汇编”(即(即 翻译)转换成机器语言指令代码,再由计算机识别并执行。翻译
3、)转换成机器语言指令代码,再由计算机识别并执行。v汇编语言源程序汇编语言源程序 目标程序目标程序v汇编语言源程序的基本组成单位是语句。汇编语言源程序的基本组成单位是语句。v源程序中使用的语句有三种:源程序中使用的语句有三种: 指令语句、伪指令语句和宏指令语句(或称宏调用语句)指令语句、伪指令语句和宏指令语句(或称宏调用语句)v5.1概述概述v5.2汇编语言语句汇编语言语句v一、指令语句格式一、指令语句格式 指令语句的一般格式如下:指令语句的一般格式如下: 标号:指令助记符标号:指令助记符 操作数操作数 ;注释;注释1 1标标号号:标标号号是是机机器器指指令令语语句句存存放放地地址址的的符符号号
4、表表示示,代代表表该该指指令令目目标标代代码码的的第第一一个个字字节节地地址址,后后面面必必须须紧紧跟跟冒冒号号“:” ,在在指指令令语语句句中中,是任选字段。是任选字段。2 2指指令令助助记记符符:指指令令助助记记符符为为语语句句的的核核心心成成分分,表表示示了了该该语语句句的的操操作作类型。类型。汇编程序汇编程序操作数的有无、有几个,操作数的有无、有几个,取决于指令助记符取决于指令助记符翻译后,没有对翻译后,没有对应的目标代码应的目标代码曝涧琼韧俐龟赎错鸳练偷本捻蚤熊鸡苑岸愁洽杉涨括蝗庇药侮嚼泞畦责赎计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语
5、言程序设计设计3 3操作数:操作数表示指令助记符的操作对象。操作数:操作数表示指令助记符的操作对象。 4 4注注释释:注注释释均均以以分分号号开开始始,它它可可占占一一行行或或多多行行,一一般般放放在在一一条条语语句句的后面。的后面。 例:一项是含有例:一项是含有4 4个字段的一条指令语句:个字段的一条指令语句: LOP: MOV AX,0000H ;将;将AX清零清零 标号标号 指令助记符指令助记符 操作数操作数 注释注释 例:以下是含有例:以下是含有4 4个字段的一条指令语句个字段的一条指令语句 INC CXv二、二、伪指令语句格式如下:伪指令语句格式如下: 符号名符号名 伪指令符伪指令符
6、 操作数操作数 ;注释;注释1符号名:符号名:符号名是伪指令语句的一个可选项。符号名是伪指令语句的一个可选项。 允许是常量名、变量名、过程名或段名。注意符号名后无冒号。允许是常量名、变量名、过程名或段名。注意符号名后无冒号。2伪伪指指令令符符:伪伪指指令令符符指指定定汇汇编编程程序序要要完完成成的的具具体体操操作作,如如数数据据定定义义伪伪指指令令DB、DW、DD,段段定定义义伪伪指指令令SEGMENT,假假定定伪伪指指令令ASSUME等。等。 此字段必不可少。此字段必不可少。缄协遭膏掩命塞铸申汁青坦蹈较颊援佐捌傣着哉俏鹰吟卧率肃齿秤斑俱净计算机组成原理与汇编语言程序设计计算机组成原理与汇编语
7、言程序设计五、汇编语言程序五、汇编语言程序设计设计3操操作作数数:伪伪指指令令后后面面的的操操作作数数可可以以是是常常数数、字字符符串串、变变量量、表表达达式式等等,其其个个数数由由具具体体的的伪伪指指令令决决定定,各各个个操操作作数数之之间间必必须须以以“逗逗号号”分分隔。隔。4注注释释:伪伪指指令令的的注注释释必必须须以以“;”开开始始,其其作作用用同同指指令令语语句句中中的的注注释部分。释部分。 伪指令语句是指示汇编程序如何汇编源程序的命令语句,在汇编时,伪指令语句是指示汇编程序如何汇编源程序的命令语句,在汇编时,它不产生目标代码,由汇编程序解释他的意义逼供能立即完成相应的它不产生目标代
8、码,由汇编程序解释他的意义逼供能立即完成相应的操作。操作。例:以下是一条伪指令语句:例:以下是一条伪指令语句: VAR1 OB 12H;给;给VAR1分配一个字节单元,初值为分配一个字节单元,初值为12Hv 三、标识符三、标识符 标识符是指令语句中标号和伪指令语句中的符号名和统称,其标识符是指令语句中标号和伪指令语句中的符号名和统称,其组成规则如下:组成规则如下:(1)字符个数)字符个数131;(2)第一个字符开始,可以是字母或特殊字符,特殊字符有)第一个字符开始,可以是字母或特殊字符,特殊字符有5个:?个:? _ $ . ;(3)第二个字符开始,可以是字母、数字或特殊字符;)第二个字符开始,
9、可以是字母、数字或特殊字符;(4)标识符不能与系统专用保留字()标识符不能与系统专用保留字( 伪伪/指令助记符)相同指令助记符)相同汤纵赵愉险福扯鲸狼烷惩陆颐秸跃驳方沃北状淑森楼起拂胡自贩意炎缚形计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计例如:标识符:?例如:标识符:?ABC 、 _VAR 、.234、A2 非标识符:非标识符:1ABC 、 VAR 、ADD、256 总结:伪指令和指令的通用格式:总结:伪指令和指令的通用格式: 1311.名字字段(名字字段(Name Field)名字字段的三个注意事项:)名字字段的三个注意事项: 开
10、头开头2.操作符字段(操作符字段(Operator Field) 保留字保留字3.操作数字段(操作数字段(Operand Field)4.注释字段(注释字段(Comment Field)v5.3汇编语言数据汇编语言数据v5.3.1符号定义语句符号定义语句1、等值伪指令、等值伪指令指令格式:符号指令格式:符号 EQU 表达式表达式/符号符号EQU伪指令的左移是将表达式的值或表达式赋给伪指令的左移是将表达式的值或表达式赋给EQU左边的符号左边的符号例:用符号标识常数、数值表达式例:用符号标识常数、数值表达式 NUM EQU 10H COUN EQU 1234+34-67 VAR DB NUM MO
11、V AX,NUM符号定义后可在符号定义后可在表达式中使用表达式中使用摹殃蚂倍列蠢欣鸯形魁豹观从寺狡卓瞻忍搁磕婴耐埋烙遥捂疹疗蔚树脆婴计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计例:用字符代表地址表达式、变量名和标号例:用字符代表地址表达式、变量名和标号 ADR EQU ES:BXSI VB EQU DATA_BYTE+1 L1 EQU FAR PTR SUB1 MOV ADR,AL ADD BL,VB JMP L1例:用符号代表寄存器、指令助记符例:用符号代表寄存器、指令助记符 AREG EQU AX M EQU MOV MOV AR
12、EG,1234H M CX,BX 等值伪指令语句仅在汇编源程序时,作为替代符号用,不产生任何目等值伪指令语句仅在汇编源程序时,作为替代符号用,不产生任何目标代码,也不分配存储单元。标代码,也不分配存储单元。在同一源程序中,同一符号不能用在同一源程序中,同一符号不能用EQU伪指令重新定义。例如:伪指令重新定义。例如:瞬疑熙通萌鞘惠陨盼突蔚划余帅侯挫莎痰格森须壤扶滨喘谷衬疤愉农皋羞计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计M EQU MOV M EQU MUL第二条语句在汇编时,会产生符号重新定义的语法错误。第二条语句在汇编时,会产生符
13、号重新定义的语法错误。2、等号伪指令、等号伪指令格式:符号表达式格式:符号表达式这种伪指令的含义和作用与这种伪指令的含义和作用与EQU等值伪指令相同。但有如下差异:等值伪指令相同。但有如下差异:(1)等号伪指令可以重新定义符号。例如:)等号伪指令可以重新定义符号。例如: CONT10 M100 CONTCONT10 M30 (2)等号伪指令不可以重新定义汇编指令,)等号伪指令不可以重新定义汇编指令,EQU可以可以年哭膛扦场场氰豆窗目晒楷偷恕刺淮锻轴妈烟龄声蜕小睬轩氛扛抗晕俗哲计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v5.3.2数据
14、定义语句数据定义语句v数据定义伪指令语句格式如下:数据定义伪指令语句格式如下: DB变量名变量名 DW 表达式表达式1,表达式,表达式2, DD DB:为定义的变量分配字节单元:为定义的变量分配字节单元DW:为定义的变量分配字单元:为定义的变量分配字单元DD:为定义的变量分配:为定义的变量分配4个字节单元个字节单元/双字单元双字单元数据定义语句必须出现在某个逻辑段中数据定义语句必须出现在某个逻辑段中例:在例:在DATA1数据段中定义了数据段中定义了3个变量:个变量: DATA1 SEGMENT VAR1 DB 10H VAR2 DW 1234H VAR3 DD 12345678H经过定义后的每
15、个变量都有经过定义后的每个变量都有3个属性:个属性:标识符条件标识符条件伪指令符伪指令符腕勋咸下饯喻忍拷泪浙世壁充即牙务息葛氢纲仁犬饰慎役病啥峙逊抱敦宁计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计(1)段属性()段属性(SEG) 表示变量存放在哪一个逻辑段中,它是用变量所在段的段基值来表示变量存放在哪一个逻辑段中,它是用变量所在段的段基值来表示的。例如上面的表示的。例如上面的DATA1数据段定义的数据段定义的VAR1、VAR2 、VAR3 3个个变量段属性就是变量段属性就是DATA1段的段基值。段的段基值。(2)偏移量属性()偏移量属
16、性(OFFSET) 该属性表示变量在逻辑段中相距段起始地址(段基址)的字节数。该属性表示变量在逻辑段中相距段起始地址(段基址)的字节数。例如:例如:VAR1的偏移量为的偏移量为0, VAR1的偏移量为的偏移量为1, VAR1的偏移量为的偏移量为2上述段和偏移量上述段和偏移量2个属性就构成了变量的逻辑地址。个属性就构成了变量的逻辑地址。(3)类型属性()类型属性(TYPE) 该属性表示变量所占存储单元的字节个数:字节数据、字数据、该属性表示变量所占存储单元的字节个数:字节数据、字数据、双字数据。双字数据。DB将变量定义为字节型(将变量定义为字节型(1个字节),个字节),DW将变量定义为字将变量定
17、义为字型(型(2个字节),个字节),DD将变量定义为双字型(将变量定义为双字型(4个字节)。个字节)。 v数据定义语句按照伪指令数据定义语句按照伪指令DB,DW和和DD所确定的数据大小来给变量(或所确定的数据大小来给变量(或 存储单元)分配相应数量的存储单元,同时给这些存储单元预置由表达式存储单元)分配相应数量的存储单元,同时给这些存储单元预置由表达式 确定的初值。它们通常有以下几种形式:确定的初值。它们通常有以下几种形式:1、数值表达式、数值表达式 例如:例如:DATA数据段定义了字节、字、双字变量数据段定义了字节、字、双字变量氦地乖啼吕车汪召撑降洪刚鳖奥十拢再榆渐士月啪电甥簧族航拖兄迫怕笨
18、计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计DATA SEGMENTVARB1 DB 10HVARB2 DB 10,11,12 DB 0FFH,0VARW DW 1234H,5678HVARD DD 12345678HDATA END VARB110HVARB20AH0BH0CHFFH00H34H12H78H56H78H56H34H12HVARWVARD字字字字双字双字缨画敖海獭减辊良伐捕夺污遗嘘酶显嫉璃滦筑符卜钻壶倒瓜柬冻秽黑猛盘计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计
19、2、字符串表达式、字符串表达式例如:以下是例如:以下是3个字符串变量的定义个字符串变量的定义DATA_S SEGMENTSTRING1 DB ABCDSTRING2 DW AB,CD,ASTRING3 DD ABDATA_S ENDA、用、用DW伪指令定义字符串时,每一个字符串只能由伪指令定义字符串时,每一个字符串只能由12个字符组成,个字符组成,并分配并分配2个字节存储单元。如果是两个字符组成,则前一个字符的个字节存储单元。如果是两个字符组成,则前一个字符的ASCII码放在高字节单元中,后一个放在低字节单元。码放在高字节单元中,后一个放在低字节单元。B、DD定义字符串时,每一个字符串只能由定
20、义字符串时,每一个字符串只能由12个字符组成,并分配个字符组成,并分配4个字节存储单元。其中个字节存储单元。其中12个字符的个字符的ASCII码存储在两个低字节(顺码存储在两个低字节(顺序和序和DW伪指令相同)中,两个高字节放伪指令相同)中,两个高字节放00H。C、DB伪指令定义字符串时,每个字符串中字符个数不得超过伪指令定义字符串时,每个字符串中字符个数不得超过256个。个。搁恰旅堰厂渤捎嗓刁啥凹瓜捕侮沽勉霖暗垢玛林蓝吸畦倍泌呀柳弄址铅伶计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计3、地址表达式(只适用、地址表达式(只适用DW和和D
21、D两个伪指令)两个伪指令)4、 ? 表达式表达式5、带、带DUP的表达式的表达式 DB变量名变量名 DW 表达式表达式1 DUP(表达式(表达式2) DD DUP操作符允许嵌套使用,即表达式操作符允许嵌套使用,即表达式2又可以是一个带又可以是一个带DUP的表达式的表达式STRING141HSTRING242H43H44H42H41H44H43H41H00H42H41H00H00HSTRING3字字字字双字双字字字评韦娜象礼鲜印通盛汀音蝇旦水欢纺掂噬赣观临伏摹惭倔谱既亦螺由娃遣计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计例如:例如: B
22、UF DB 100 DUP(0)以以上上语语句句定定义义了了以以BUF为为首首址址,大大小小为为100个个字字节节,初初值值为为0的的数数据据存存储单元。储单元。v5.3.3数据数据v一、常数一、常数1、 数值常量数值常量 嗜淮浇蝇为枪琐拳卑先授插淆种深娱薄花甜鼎兹械掩籽拌恐盈纽局烂骄鸣计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计2、字符串常量、字符串常量字符串常量是用单引号或双引号引起来的一个或多个字符。字符串常字符串常量是用单引号或双引号引起来的一个或多个字符。字符串常量是以各字符的量是以各字符的ASC码表示的。如码表示的。如A用
23、用41H 表示,字符串表示,字符串A1B2用用41H,31H,42H,32H表示。表示。3、常数的使用、常数的使用(1)在指令语句的源操作数中作立即数。如:)在指令语句的源操作数中作立即数。如: ADD AL,0F5H ;常数作源操作数;常数作源操作数 MOV AX,AB ;字符串作源操作数;字符串作源操作数 MOV CX,12 ;字符串作源操作数;字符串作源操作数(2)在指令语句中,常数可作为存储器操作数寻址方式中的位移量。)在指令语句中,常数可作为存储器操作数寻址方式中的位移量。如如: MOV AX,DS:1000H ;直接寻址方式;直接寻址方式 ADD 10HDI,CX ;变址寻址方式;
24、变址寻址方式 MOV AL,0ABHBX ;基址寻址方式;基址寻址方式 SUB DX,1234HBPSI ;基址变址寻址方式;基址变址寻址方式 (3)在数据定义伪指令中,可作为分配单元的初值。如:在数据定义伪指令中,可作为分配单元的初值。如: DW 1234H ;定义一个字数据;定义一个字数据 DB ABCD ;定义;定义4个字符的字符常量个字符的字符常量胳光扔啦奏来巷硬叭鹏晾域路坍另提烛挨考瘴酱瓢涂阂硕决钨捏月鼓谢筒计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v二、变量二、变量v1、变量、变量(1)段属性)段属性(2)偏移地址属性)
25、偏移地址属性(3)类型属性)类型属性v2、变量的使用、变量的使用v在在一一个个逻逻辑辑段段中中,用用数数据据定定义义语语句句定定义义并并预预置置数数据据初初值值后后,变变量量名名就就作作为为存存储储单单元元的的符符号号地地址址,代代表表了了存存放放在在存存储储单单元元的的数数据据。引引用用变变量量名名就就是是使使用用变变量。其他语句中,使用分为两种情况:量。其他语句中,使用分为两种情况:(1)在指令语句中)在指令语句中 一个地址表达式的值表示了存放操作数的存储单元偏移量。一个地址表达式的值表示了存放操作数的存储单元偏移量。一个地址表达式的值表示了存放操作数的存储单元偏移量。一个地址表达式的值表
26、示了存放操作数的存储单元偏移量。 a、直接引用变量名对变量进行存取操作、直接引用变量名对变量进行存取操作 例如:例如:VAR1 DB 0FFH VAR2 DB ? STRING DB ABCD MOV AL,VAR1 ;直接寻址方式直接寻址方式 MOV VAR2,AL ;直接寻址方式直接寻址方式 MOV BL,STRING+1;放;放B字符的字符的ASCII码放到码放到BL中中庐哮噪殴惧致札枫缸晒黄世树光埃嘲在钨雕书灼扛趟戮盛九纲抚锰骸祁估计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计 b、位移量部分使用变量名、位移量部分使用变量名 例
27、:例:VAR3 DB 10H DUP(1) VAR4 DW 10H DUP(?) MOV AL,VAR3SI ; 变址寻址,用变址寻址,用VAR3的偏移量的偏移量 作为源操作数的位移量作为源操作数的位移量 MOV VAR4BXDI,DX ;基址变址寻址,用;基址变址寻址,用VAR4的偏的偏 移量作为目的操作数的位移量移量作为目的操作数的位移量(2)在用)在用DW或或DD的数据定义伪指令中分配的存储单元中,将预置被的数据定义伪指令中分配的存储单元中,将预置被引用变量的地址部分段基值和偏移量。如使用引用变量的地址部分段基值和偏移量。如使用DW,则仅有被引用则仅有被引用变量的偏移量;如使用变量的偏移
28、量;如使用DD,则前两个字节存放偏移量,后两个字节存,则前两个字节存放偏移量,后两个字节存放段基值。在这种情况下,不能在放段基值。在这种情况下,不能在DB数据定义语句中引用变量名。例:数据定义语句中引用变量名。例: VAR1 DB 10H DUP(0) VAR2 DW 10H DUP(AB) ADR1 DW VAR2 ADR2 DD VAR2 呻粱缸坡则或叭却瘤薄抒湛棱瘁青府伐洒辈揣立昧剂抱薛戚戏束血友卖畏计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计上述示例中,变量上述示例中,变量ADR1的内容(即字存储单元内容)是变量的内容(即字存
29、储单元内容)是变量VAR2的偏的偏移量,而移量,而ADR2双字存储单元的内容是变量双字存储单元的内容是变量VAR2的偏移量和段基值。的偏移量和段基值。v三、标号三、标号指令语句的名字字段上的名字叫标号,它是一条指令的符号地址。指令语句的名字字段上的名字叫标号,它是一条指令的符号地址。标标号号是是一一条条指指令令语语句句的的符符号号地地址址。在在汇汇编编源源程程序序中中,只只有有在在需需要要转转向向一一条条指指令令语语句句时时,才才为为该该指指令令语语句句设设置置标标号号,以以便便在在转转移移类类指指令令(含含子子程程序序调调用用指指令令)中中直直接接引引用用这这个个标标号号。因因此此,标标号号
30、可可作为转移类指令的操作数,即转移地址。作为转移类指令的操作数,即转移地址。 例例:符号地址表示。符号地址表示。 NEXT:MOV AL, SI;带标号;带标号NEXT的指令的指令 DEC CX JNE NEXT ;标号;标号NEXT作转移指令的操作数作转移指令的操作数租锅佯秀莽频捂诞殖麓另悦经耽苍圣屡二忱损擂棱奔窗辅儡延捅畜沏剃声计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计和变量一样,每个标号也有和变量一样,每个标号也有3个属性:个属性:(1)段属性()段属性(SEG) 段属性表示标号所在指令在哪个逻辑段,用这个逻辑段的段基值表示。
31、段属性表示标号所在指令在哪个逻辑段,用这个逻辑段的段基值表示。(2)偏移量属性()偏移量属性(OFFSET) 偏移量属性表示标号所在指令离段起始单元之间的字节数(准确地讲,偏移量属性表示标号所在指令离段起始单元之间的字节数(准确地讲,是指这条指令目标代码的首字节单元与段起始单元之间相距的字节数)是指这条指令目标代码的首字节单元与段起始单元之间相距的字节数) 同样,上述两个属性就构成了这条指令的逻辑地址。同样,上述两个属性就构成了这条指令的逻辑地址。(3)类型属性()类型属性(TYPE) 类型属性表明了它的转移特性,即是作为段内转移还是段间转移的目类型属性表明了它的转移特性,即是作为段内转移还是
32、段间转移的目标地址。标号的类型属性有标地址。标号的类型属性有2中:中: NEAR(近):段内转移。本标号只能作为标号所在段转移类指(近):段内转移。本标号只能作为标号所在段转移类指令的目标地址。令的目标地址。 FAR(远):段间转移。本标号可作为其他段(不是标号(远):段间转移。本标号可作为其他段(不是标号 所在段)转移类指令的目标地址所在段)转移类指令的目标地址苇冠著挨缎水纠璃蓑拣臂牙芥刹贡脓命臣悬峻剥仓段骋辐费翟江货旱活旋计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计标号的类型属性可以用下面两个方法来设置:标号的类型属性可以用下面两
33、个方法来设置:1、隐含方式,某一指令选定一标号后,隐含为、隐含方式,某一指令选定一标号后,隐含为NEAR属性。例属性。例如:如: NEXT:MOV AX,1234H这时,标号这时,标号NEXT就具有就具有NEAR的类型属性。隐含方式不能设置的类型属性。隐含方式不能设置FAR属性属性2、用标识伪指令、用标识伪指令LABEL设置类型属性。设置类型属性。LABEL伪指令语句格式:伪指令语句格式: 名字名字 LABEL 类型类型 LABEL伪指令的意义是:指定名字(如标号、变量名)的类伪指令的意义是:指定名字(如标号、变量名)的类型属性。通常与指令语句、数据定义语句配合使用,补充设置类型属性。通常与指
34、令语句、数据定义语句配合使用,补充设置类型属性。型属性。 其使用分其使用分2中情况:中情况:A、LABEL语句与指令语句连用语句与指令语句连用 SUB1_FAR LABEL FAR SUB1: MOV AX,789H 佬文漂曹馁想康鸡胞旋担给升烦牺递巴挥喷颧瓣刀往腺菩随总心伙套竹已计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计SUB1_FAR和和SUB1有相同的段和偏移量属性的标号,但属有相同的段和偏移量属性的标号,但属性类型不同,性类型不同, SUB1_FAR是是FAR,SUB1是是NEAR。如果这。如果这一指令是某程序段的入口,则段
35、内转移时可用一指令是某程序段的入口,则段内转移时可用SUB1作为入作为入口,而其他段转移到此程序段时,就要用口,而其他段转移到此程序段时,就要用SUB1_FAR作入口。作入口。B、LABEL语句与数据定义语句连用语句与数据定义语句连用 例:例:DA_B1 LABEL BYTE DA_W1 DW 10H DUP(1234H) 上述变量上述变量DA_W1的数据类型是字,因此每次对它的存取是的数据类型是字,因此每次对它的存取是按字(两个字节)进行。如:按字(两个字节)进行。如:“MOV AX,DA_W14”指令指令就是把就是把DA_W1起始的第起始的第5,6个字节组成的个字节组成的3个字节送个字节送
36、AX。欲想取出第欲想取出第5个字节的内容,这时可用个字节的内容,这时可用“MOV AL,DA_B1+4”。v5.3.4表达式与运算符表达式与运算符1 1算术运算符算术运算符2 2逻辑运算符逻辑运算符3 3关系运算符关系运算符4 4属性与分离字节运算属性与分离字节运算5 5数值返回运算符数值返回运算符虱它锈饭旋戚肛唉师延粗均踞谗钾日垢吮狮寒壹鸯耍坦愁仪倍穿午谦裙值计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v1算术运算符算术运算符算术运算符包括:(加)、(减)、算术运算符包括:(加)、(减)、*(乘)、(除)、(乘)、(除)、MOD (
37、求模)、(求模)、 (下标运算下标运算)、SHL(左移)、(左移)、SHR(右移)几种,它既(右移)几种,它既可可 以用于数值表达式又可用于地址表达式。以用于数值表达式又可用于地址表达式。【例【例3.4】用算术运算符进行数值表达式运算。】用算术运算符进行数值表达式运算。 NUM1 EQU 25*4 50 ;NUM1=50 NUM2 EQU NUM1 / 7 ;NUM2=7 NUM3 DB NUM1 MOD 7;NUM3=1 VAR1 DB 1,2,3,4,5 VAR2 DB 12345 NUM4 EQU VAR2-VAR1;NUM4=5 NUM5 EQU 0FH MOVAL,NUM5 SHL
38、4; (AL)=11110000B MOVBL,NUM5 SHR 4; (BL)=00000000B峻奎语乐厢暑椭毫组淹痛蘑蹿丽卯内节玲慑靖兰嚷平匠酶淀镣冒媚壹老齿计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计移位运算符与移位指令是完全不同的。移位运算符是对某一具体数移位运算符与移位指令是完全不同的。移位运算符是对某一具体数(常数)在汇编时完成移位的,而移位指令是对一个寄存器操作数或存(常数)在汇编时完成移位的,而移位指令是对一个寄存器操作数或存 储器操作数,在程序允许时完成的。储器操作数,在程序允许时完成的。下标运算符下标运算符 只用
39、于地址表达式,它表示地址相加,常用于存取数组只用于地址表达式,它表示地址相加,常用于存取数组 元素。如:下面两条指令语句是等价的。元素。如:下面两条指令语句是等价的。 MOV AX,ARRAY3 MOV AX,ARRAY+3v2逻辑运算符逻辑运算符逻逻辑辑运运算算符符包包括括:逻逻辑辑乘乘(AND)、逻逻辑辑加加(OR)、按按位位加加(XOR)、逻逻辑辑非非(NOT)四四种种运运算算。由由于于逻逻辑辑运运算算是是按按位位操操作作,且且在在汇汇编编过过程程中完成,因而运算的结果仍为整数常量。中完成,因而运算的结果仍为整数常量。 【例】用逻辑运算符进行运算。【例】用逻辑运算符进行运算。 MOVAL
40、,34H AND 0FH ;04HAL MOVBL,05H OR 30H ;35HBL顶矛底坦伦采钳令旱蓝颁否垂犯咬痒伏费卸馋朋攫捆抢眨贝瞅伤役罪刻颗计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计 MOVCX,NOT 00FFH ;0FF00HCX MOVDX,789AH XOR 000FH ;7895HDXv3关系运算符关系运算符关系运算符包括:相等(关系运算符包括:相等(EQ),不等(),不等(NE),小于(),小于(LT),大于),大于(GT),小于等于(),小于等于(LE)及大于等于()及大于等于(GE)。)。 对对2个表达式比
41、较要求个表达式比较要求2个表达式表示方法个表达式表示方法/性质相同,例同为数值表达性质相同,例同为数值表达式或地址表达式。当关系成立时,结果为全式或地址表达式。当关系成立时,结果为全1;不成立时,为全;不成立时,为全0。 【例】用关系运算符进行数值表达式运算。【例】用关系运算符进行数值表达式运算。NUM1DB 10 LT 5 ;NUM1=0NUM2DB 0AAAAH GT 7FFFH;NUM2=0FFFFHMOVAX, A EQ 41H ;0FFFFHAXMOVBX, NUM2 LT NUM1 ;0BX鬃膳汞广每肖苹恶涩谆注争生镑坍坛阀钦雁护宋表探啤推前研作算渭悼傲计算机组成原理与汇编语言程序
42、设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v4.数值返回运算符数值返回运算符(1)SEG 运算符运算符(2)OFFSET运算符运算符(3)TYPE运算符运算符(4)LENGTH运算符运算符(5)SIZE运算符运算符v(1)SEG 运算符运算符格式:格式:SEG 变量或标号变量或标号功能:分离出其后变量或标号所在段的段首址。例如:功能:分离出其后变量或标号所在段的段首址。例如: MOVAX,SEGARR MOVDS,AXv(2)OFFSET运算符运算符格式:格式:OFFSET 变量或标号变量或标号功能:分离出其后变量或标号的偏移地址。例如:功能:分离出其后变量或
43、标号的偏移地址。例如: MOV BX,OFFSET BUF溶严速傍邀认撰缚傀督圃锯驰迎筑勇冕珐篓籍哭津有滓蒙辕垛惜函困挑诛计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v例:设例:设DATA数据段是从物理地址数据段是从物理地址20000H开始,其定义如下:开始,其定义如下: DATA SEGMENT VAR1 DB 10,15,20 VAR2 DW 0FFFFH,100H DATA ENDS MOV AX,SEG VAR1 MOV SI, OFFSET VAR1 MOV BX,SEG VAR2 MOV DI, SEG VAR2上述上述4
44、条指令汇编后就分别是:条指令汇编后就分别是: MOV AX,2000H MOV SI, 0 MOV BX,2000H MOV DI, 3补敖窄揖剩憎赶兄删室冲戈袁呀使老讼熊绵闪曝矛像议金榔顾屠捕漓恢汕计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v(3)TYPE运算符运算符格式:格式:TYPE 变量或标号变量或标号功能:分离出其后变量或标号的类型。如果是变量,将返回该变功能:分离出其后变量或标号的类型。如果是变量,将返回该变 量的类型对应字节数;如果是标号,则返回代表标号类型的数量的类型对应字节数;如果是标号,则返回代表标号类型的数 值
45、。它们之间的关系见表值。它们之间的关系见表3.2所示。所示。壬逛吮颤私中龚哎骇猪癣憾瓮坪猴猖炸牧犬脖嗡眺梅除嘎哦阮秦盯值褥笋计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计例如:例如: VAR1 DB 12H,13H VAR2 DW 10H,DUP(0) VAR3 DD VAR1 MOV AL,TYPE VAR1;AL1 MOV CX,TYPE VAR2;CX2 MOV BL,TYPE VAR3;BL4v (4) LENGTH运算符和运算符和SIZE运算符运算符格式:格式:LENGTH 变量变量功能:取出变量所含的数据存储单元个数。功能:
46、取出变量所含的数据存储单元个数。 格式:格式:SIZE 变量变量功能:取出变量所含的数据存储区大小。其返回值为:功能:取出变量所含的数据存储区大小。其返回值为: LENGTH 变量变量 * TYPE 变量变量狐票妻垃祖迸剂脱控摈碱楷螟汾否汽悟恃索乐涨诡喜豁菏癣侮粕鞘受马债计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计LENGTH和和SIZE运算符的具体运算规则是:如果变量是用重复操作符运算符的具体运算规则是:如果变量是用重复操作符 DUP定义的,那么运算符定义的,那么运算符LENGTH的运算结果是外层的运算结果是外层DUP的给定值的给定
47、值 (即外层重复次数),如果没有用(即外层重复次数),如果没有用DUP定义的变量,运算结果总是定义的变量,运算结果总是1。 而运算符而运算符SIZE是是LENGTH和和TYPE两个运算结果的乘积。两个运算结果的乘积。 【例】取出变量占存储单元个数。【例】取出变量占存储单元个数。 DATASEGMENT A DBABCDEF BDW10DUP(1,2DUP(2) CDB3,20DUP(0) DATAENDS MOVAX,LENGTH A;1AX MOVBX,LENGTHB;10BX MOVCX,LENGTHC;1CX 辅墒硕烟段尊钦骄赡芥霸更级辗闺超陋肉岂担饶液羞尧绰专鲁缔疫邓回该计算机组成原理
48、与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计 SIZE A = LENGTH A*TYPE A = 1 SIZE B = LENGTH B*TYPE B = 20 SIZE C = LENGTH C*TYPE C = 1SIZE只能加在变量前面,对于一维数组,正好是数则所占的存储单元只能加在变量前面,对于一维数组,正好是数则所占的存储单元的字节数。的字节数。v5、属性与分离字节运算、属性与分离字节运算1、属性运算符、属性运算符 这种运算符的运算对象只能是变量、标号或存储器地址。其功能是在这种运算符的运算对象只能是变量、标号或存储器地址。其功能是在汇
49、编过程中,为存储器操作数指定一个新的类型属性。汇编过程中,为存储器操作数指定一个新的类型属性。 格式:格式: 类型类型 PTR 地址表达式地址表达式 其中,类型可以为其中,类型可以为BYTE、WORD、DWORD、NEAR和和FAR,地址,地址 表达式是指要修改类型属性的变量、标号或存储器操作数。表达式是指要修改类型属性的变量、标号或存储器操作数。这种类型这种类型 属性的设定只在含有这运算符的语句内有效。属性的设定只在含有这运算符的语句内有效。 PTR与与EQU连连用用,可可定定义义与与PTR右右边边地地址址表表达达式式类类型型不不同同的的新新变变量量名名或新标号,但不另分配存储单元。例如:或
50、新标号,但不另分配存储单元。例如:框牢哲侮咕弟所遁况掉息驶蛀阳袜廷段御鼓程却询蚕著猛才晾泼腑凝序仓计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计 VRW1 DW 1234H VRB1 EQU BYTE PTR VRW1 MOV AX,VRW1 MOV BL,VRB1;不会为不会为VRB1重新分配新的存储单元,重新分配新的存储单元,VRB1和和VRW1具有相同的段属具有相同的段属性和偏移量。即逻辑地址相同。性和偏移量。即逻辑地址相同。在指令中也可使用在指令中也可使用PTR,临时修改变量或标号属性仅在此指令中存放,临时修改变量或标号属性仅在
51、此指令中存放,其他指令无效。其他指令无效。例如:例如: VB DB 10H DUP(0) VW DW 20H DUP(0) MOV AX, WORD PTR VB6 ADD BYTE PTR VW1,0FH INC WORD PTR SI JMP FAR PTR SUB1 AX是是16位,临位,临时修改按字访问时修改按字访问0FH是是8位,临时位,临时修改按字节访问修改按字节访问谦麓捕俊燕回断竿遵扛攘骑匝瞳要舒逗弃拌雍厂崎昌镐裕遵渺址泡挥幕靛计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计 2、分离字节运算符、分离字节运算符字节分离运算符
52、包括:字节分离运算符包括:HIGH和和LOW。格式:格式:HIGH 常量或地址表达式常量或地址表达式 LOW 常量或地址表达式常量或地址表达式功功能能:HIGH 用用来来分分离离出出其其后后16位位常常量量或或地地址址表表达达式式的的偏偏移移量量的的高高字字节节;LOW用用来来分分离离出出其其后后16位位常常量量或或地地址址表表达达式式偏偏移移量量的的低低字字节。节。运算符优先级:见课本运算符优先级:见课本P187表表5-5v5.4伪指令语句伪指令语句v5.4.1段定义语句段定义语句编制一个编制一个8086/8088汇编语言程序,段是基础。一是必须按照段来构汇编语言程序,段是基础。一是必须按照
53、段来构 造程序,二是程序的执行,根据造程序,二是程序的执行,根据DS、ES、CS、SS分别访问不同段对分别访问不同段对 应的单元。应的单元。v一、段定义伪指令一、段定义伪指令SEGMENT/ENDv二、段寻址伪指令二、段寻址伪指令ASSUMEv三、段寄存器的装入三、段寄存器的装入坝刘蘸路艾队响哮饥凤磋毫祭琅铝坞疹涡平限奇勇缮络颐赶臣裙哗秦咬相计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v一、段定义伪指令一、段定义伪指令SEGMENT/END定义段名、起始边界定义段名、起始边界其语句格式为:其语句格式为: 段名段名 SEGMENT 定位
54、类型定位类型 组合类型组合类型 类别名类别名 (段内的语句序列)(段内的语句序列) 段名段名 ENDS 1段名段名2定位方式定位方式3类别类别4组合方式组合方式v1、段名、段名段名是为该段起的名字,用来指出汇编程序为该段分配的存储区起始段名是为该段起的名字,用来指出汇编程序为该段分配的存储区起始位置。由用户自定,且必须满足标识符的条件。如位置。由用户自定,且必须满足标识符的条件。如 STACK、CODE、DATA灸躯焙竣赣耗姻舔愚莫祷塑赶固坛闲执案严素壮赫狈棵夸檀培浓他驮宾迹计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v2定位类型定位
55、类型定位类型是一个选项,它表示对段起始边界的要求,可以有定位类型是一个选项,它表示对段起始边界的要求,可以有4种选择:种选择:(1)PAGE(页页):表表示示本本段段要要从从一一个个页页的的边边界界开开始始,即即能能被被256整整除的地址处开始存放,即起始地址的最低八位必须是除的地址处开始存放,即起始地址的最低八位必须是0。(2)PARA(节节):表表示示本本段段必必须须从从一一个个节节的的边边界界开开始始,即即必必须须从从能能被被16整除的地址处开始存放,即段起始地址最低四位必须是整除的地址处开始存放,即段起始地址最低四位必须是0。 如果未选择定位类型,则隐含如果未选择定位类型,则隐含PAR
56、A。(3)WORD(字字):表表示示本本段段要要从从一一个个偶偶数数地地址址处处开开始始存存放放,即即段段起起始地址的最低一位必须是始地址的最低一位必须是0。(4)BYTE(字节):表示本段起始地址可以从任一地址处开始存放。(字节):表示本段起始地址可以从任一地址处开始存放。v3、组合类型、组合类型 组合类型也是一个可选项,它表示本段是否与其它段进行连接,组合类型也是一个可选项,它表示本段是否与其它段进行连接,有六种有六种 类型可供选择。类型可供选择。 (1 1)NONENONE“不选择不选择”(2 2)PUBLIC PUBLIC (3 3)STACK STACK (4 4)COMMON CO
57、MMON (5 5)MEMORY MEMORY (6 6)ATAT表达式表达式 烷肋运迸著戴碍赛瘩除秘只树企彤浓苑泄唁瞒丝冠栖舱娟敛丫暖鞋褒影身计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计(1)NONE 这是隐含选择,表示本段与其他段在逻辑上无连接关系,本段有自己的段基址。这是隐含选择,表示本段与其他段在逻辑上无连接关系,本段有自己的段基址。(2)PUBLIC 在满足定位类型的条件下,将本段与其他段名相同的段邻接在一起形成一个段,在满足定位类型的条件下,将本段与其他段名相同的段邻接在一起形成一个段, 共用一个段基址,并相对这个段基址调
58、整段内变量的偏移量。共用一个段基址,并相对这个段基址调整段内变量的偏移量。(3)COMMON 当连接多个程序模块时,为各模块中段名相同且用当连接多个程序模块时,为各模块中段名相同且用COMMON说明的段指定相同说明的段指定相同 的段起始地址,并产生一个覆盖段。该段的长度取决于最长的的段起始地址,并产生一个覆盖段。该段的长度取决于最长的COMMON段的长段的长 度。度。(4)STACK 将同段名的段连接成一个连续段,并且自动初始化堆栈寄存器将同段名的段连接成一个连续段,并且自动初始化堆栈寄存器SS和堆栈指针和堆栈指针 SP,SS中为这个段的段基值,中为这个段的段基值,SP中为该段的字节长度。中为
59、该段的字节长度。(5)MEMORY表示本段连接在其它所以段的后面,即分配在存储器的高址址端。表示本段连接在其它所以段的后面,即分配在存储器的高址址端。(6)AT表达式表达式表示本段的起始地址由表达式的值指定。表达式的值只能为表示本段的起始地址由表达式的值指定。表达式的值只能为16位二进制数。如位二进制数。如“AT 1001H”表示本段从主存地址表示本段从主存地址10010H开始。开始。(表示本段可定位在表达式所指示的小节边界上)(表示本段可定位在表达式所指示的小节边界上)浚伴剂蹬堪话嚼蹋尧柠堂关诉零掏币噬乖杉耿丧线澳型例刁舍矗先草由索计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序
60、设计五、汇编语言程序五、汇编语言程序设计设计v4、类别名、类别名用用(单引号)引起来,通常同类型的段可用相同的类别名。当链接程序对(单引号)引起来,通常同类型的段可用相同的类别名。当链接程序对这些这些 段进行连接的时候,将它们临接放在一起。段进行连接的时候,将它们临接放在一起。例下面是一个源程序的分段结构:例下面是一个源程序的分段结构: DATA1 SEGMENT PARA DATA DATA1 ENDS STACK1 SEGMENT PARA STACKD STACK1 ENDS DATA2 SEGMENT BYTE DATA DATA2 ENDS STACK2 SEGMENT PARA S
61、TACKD STACK2 ENDS CODE SEGMENT PARA MEMORY ASSUME CS:CODE,DS:DATA1,SS:SI START: . CODE ENDS END START组合类型组合类型NONE数据段类别名数据段类别名组合类型组合类型NONE相相同,与第一个段临同,与第一个段临接的放在一起接的放在一起组合类型组合类型STACK相同,两个段临相同,两个段临接的放在一起接的放在一起甸明窗空涡捷亲凭尹诲蒋育即未纲创抉鸥郁靖钦串咎脸谚削碟泣有撒啦奖计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计DATA1和和DAT
62、A2在内存中装在一起,但是有各自不同的逻辑地址,逻在内存中装在一起,但是有各自不同的逻辑地址,逻辑上不相关。辑上不相关。DATA2的定位类型是的定位类型是BYTE,所以与,所以与DATA1无间隔。无间隔。STACK1从一个节的边界开始的,从一个节的边界开始的,STACK2与前一个与前一个STACK1有相同的有相同的类别名。由于类别名。由于STACK2使用节边界,所以可能与使用节边界,所以可能与STACK1有间隔。有间隔。CODE段放在所以段的后面,起始边界是节边界,所以可能与前面的段放在所以段的后面,起始边界是节边界,所以可能与前面的有间隔。有间隔。主存主存DATA1DATA2STACK1ST
63、ACK2CODEFFFFFH00000H通过汇编连接在内存中的情况通过汇编连接在内存中的情况楷诲笨傈去店叉绅沃咎写踩恢九惶雅给味枫堆届缉须辕予碉阳颈柴镣郑摊计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v通常练习用的程序,通常只需分三个段,其结构如下:通常练习用的程序,通常只需分三个段,其结构如下:DATA SEGMENT DATA ENDS STACK1 SEGMENT PARA STACK STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START : CODE E
64、NDS END START DATA无定位类型和组合类型,表明其它定位类型为节边界。组合类无定位类型和组合类型,表明其它定位类型为节边界。组合类型为型为NONE;STACK1,节边界,组合类型,节边界,组合类型STACK; CODE,代码段,无定位类型、组合类型。,代码段,无定位类型、组合类型。哥片制师礼础狱认蚀难饥评秦独横啪窗鹰胳肺川傈瘟哗郭虚牟殉范排妇襄计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v二、段寻址伪指令二、段寻址伪指令ASSUME格式:格式:ASSUME 段寄存器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名功
65、能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。功能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。【例【例3.21】用】用ASSUME伪指令建立代码段、堆栈段与伪指令建立代码段、堆栈段与CS和和SS的对应关系。的对应关系。DATA1SEGMENTDA1 DB ?DATA1ENDSDATA2SGEMENTDB2DB ?DATA2ENDSCODESEGMENT ASSUME CS:CODE ,DS:DATA1,ES:DATA2START: DA3 DB ? MOVDS,AX ;DATA1DS MOVAX,DATA3 MOVES,AX ;DATA3ES CODEEND
66、S ENDSTART检藻痴厚挨婪秦贫绩晨议削解隐弘弘会竖琳班墅臀腺蓉示抄柑矣褒琅嘶嵌计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计变量所在的段是由哪个段寄存器指定的。变量所在的段是由哪个段寄存器指定的。DA1所在段所在段DATA1由由DS段寄段寄存器提供,存器提供,DA2所在段所在段DATA2是由是由ES段寄存器提供,段寄存器提供,DA3所在所在CODE段是由段是由CS提供。提供。在汇编程序在汇编每条指令时,如有需要访问存储器的操作,就要进在汇编程序在汇编每条指令时,如有需要访问存储器的操作,就要进行逻辑地址到物理地址的转换,这时应该知
67、道使用哪个段寄存器。行逻辑地址到物理地址的转换,这时应该知道使用哪个段寄存器。ASSUME只指明段和段寄存器之间的关系,而不产生任何目标代码。只指明段和段寄存器之间的关系,而不产生任何目标代码。v三、段寄存器的装入三、段寄存器的装入 4个段寄存器的装入方法有所不同,下面分别介绍:个段寄存器的装入方法有所不同,下面分别介绍:1、DS和和ES的加载的加载在程序中,必须使用在程序中,必须使用MOV指令才能将对应段的段基值装入。因为在程序中,引指令才能将对应段的段基值装入。因为在程序中,引 用段名就是以立即数形式获取该段的段基值,而立即数又不能直接传送给段寄用段名就是以立即数形式获取该段的段基值,而立
68、即数又不能直接传送给段寄 存器,所以要借助通用寄存器传送段基值给存器,所以要借助通用寄存器传送段基值给DS、ES。例如:例如: DADS SEGMENT VAR1 DB 10H DADS ENDS DAES SEGMENT VAR2 DB 20H猿任撂邻跺尤挽吗麦履塌妮了椭糜波揣踏奴休现狐规丁窟锄睬颤它饼舔蹿计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计 DAES ENDS CODE SEGMENT ASSUME CS:CODE,DS:DADS STRAT: MOV AX,DADS MOV DS,AX MOV AX,DAES MOV E
69、S,AX INC VAR1 DEC ES:VAR2 CODE ENDS END START 2、SS的加载的加载SS是堆栈段寄存器,对它加载就是设置堆栈。是堆栈段寄存器,对它加载就是设置堆栈。2种方法:种方法:(1)自动加载)自动加载在在段段定定义义伪伪指指令令时时,SEGMENT语语句句中中的的组组合合类类选选择择“STACK”,表表明明这个段是堆栈段。这个段是堆栈段。DADS的段基值是立即数,的段基值是立即数,因立即数不能直接送段寄因立即数不能直接送段寄存器,故通过存器,故通过AX送入送入DS馅睁遮湘橙述本靛澈靳态祁鞋仗囤酌狙瘫殊胜帕搽宣拟燕蝗辙霓鲍踌示峭计算机组成原理与汇编语言程序设计计
70、算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计当当含含有有这这个个段段的的目目标标代代码码装装入入存存储储器器后后,SS就就自自动动设设置置STACK1段段的的段段基基值值,同同时时堆堆栈栈指指针针SP自自动动初初始始化化为为这这个个段段最最大大地地址址1单单元元的的偏偏移量。移量。(2)执行程序的方法加载)执行程序的方法加载3、CS的加载的加载当当源源程程序序经经过过汇汇编编,连连接接后后,由由DOS系系统统将将其其装装入入存存储储器器中中,同同时时将将程程序序要要执执行行的的第第一一条条指指令令地地址址装装入入CS,IP中中,然然后后从从这这条条指指令令开开始始执执
71、行。对行。对CS和和IP的设置、修改通常有两个途径:的设置、修改通常有两个途径:(1)由结束伪指令)由结束伪指令END加载程序的起始地址。加载程序的起始地址。 END伪指令的语句格式:伪指令的语句格式: END 地址表达式地址表达式 地地址址表表达达式式是是一一个个已已定定义义的的标标号号或或一一个个标标号号加加减减一一个个常常数数。地地址址表表达达 式是这个程序执行的第一条指令语句的地址。式是这个程序执行的第一条指令语句的地址。例:例: CODE SEGMENT ASSUME CS:CODE, STRAT MOV AX,DATA MOV DS,AX 凉判塞财燃烂碴榜雀任颊裸抓翟闰镜呜秸馈臭弱
72、休汞枪扯啡太遏叙恼岩湘计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计 CODE ENDS END STRAT 结束伪指令结束伪指令END有有2个作用个作用 :(:(1)源程序到此结束,后面的任何语句)源程序到此结束,后面的任何语句均被略去。(均被略去。(2)将地址表达式所确认的存储单元的段基值和偏移量分)将地址表达式所确认的存储单元的段基值和偏移量分别自动装入别自动装入CS和和IP中。中。(2)在程序允许期间,如执行程序转移类指令,实现从一个段转移到)在程序允许期间,如执行程序转移类指令,实现从一个段转移到另一个段时,它的指令功能就是修
73、改另一个段时,它的指令功能就是修改CS和和IP。v5.4.2过程定义语句过程定义语句 使用格式:使用格式: 过程名过程名PROCNEAR/FARRET. 过程名过程名ENDP RET:子程序返回指令:子程序返回指令熟歼橙悸岔仟艘棱兼奉莲般扮菊拆征罗既廖扎炬庸宣化坡他始墩匈世叉坏计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v 5.4.3定位语句和位置计数器定位语句和位置计数器符号符号“$”代表位置计数器的现行值。定位伪指令代表位置计数器的现行值。定位伪指令ORG就是对位置计数就是对位置计数器的现行值进行修改与设置。定位伪指令语句格式如下
74、:器的现行值进行修改与设置。定位伪指令语句格式如下: ORG 表达式表达式语句功能:把表达式的值赋给位置计数器。在这语句下面的目标代码语句功能:把表达式的值赋给位置计数器。在这语句下面的目标代码(指令代码或数据)以表达式给定值作为起始偏移量。(指令代码或数据)以表达式给定值作为起始偏移量。v5.4.4偶地址控制语句偶地址控制语句偶地址伪指令偶地址伪指令EVEN也是对位置计数器的一个控制指令,他把位置计数也是对位置计数器的一个控制指令,他把位置计数器调整为偶数。器调整为偶数。EVEN伪指令格式如下:伪指令格式如下: EVEN 对存储器字单元(对存储器字单元(16位)进行存取时,如是偶地址,速度较
75、快(例如位)进行存取时,如是偶地址,速度较快(例如8086CPU)。所以)。所以EVEN伪指令主要应用于定义字数据前,用以调整伪指令主要应用于定义字数据前,用以调整位置计数器为偶数。位置计数器为偶数。v 5.4.5程序标题语句程序标题语句 标题伪指令标题伪指令TITLE的格式是:的格式是: TITLE 文本文本 TITLE伪指令是指定一个标题,以便在列表文件中每一页的第一行都伪指令是指定一个标题,以便在列表文件中每一页的第一行都显示这个标题。可以是用户任选的名字或字符串,字符个数显示这个标题。可以是用户任选的名字或字符串,字符个数60个。个。余桑羹喉蟹裸告鹰脸般尔拱苗阮沿盂拎凯蓟罩绸瞪烟溅藤芋
76、拓谗廖磐旧椎计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v5.5宏指令语句宏指令语句 1.宏定义宏定义2.宏调用宏调用3.宏展开宏展开v程序设计方法概述概述4.2 4.2 顺序程序设计顺序程序设计4.3 4.3 分支程序设计分支程序设计4.4 4.4 循环程序设计循环程序设计4.5 4.5 子程序设计子程序设计4.6 4.6 模块化程序设计模块化程序设计4.7 4.7 高级汇编语言技术高级汇编语言技术攫河捐桶菏冉许剑空吹恕玉忍祟退愤姻除缝铁义燃足篡堆稠艰帕智怎谗领计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编
77、语言程序五、汇编语言程序设计设计- -程序设计方法概述v汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤汇编语言程序设计一般有以下几个步骤:汇编语言程序设计一般有以下几个步骤:1分析问题,确定算法分析问题,确定算法2绘制流程图绘制流程图3根据流程图编制程序根据流程图编制程序4调试程序调试程序v流程图流程图1、流程图的概念、流程图的概念流流程程图图是是由由特特定定的的几几何何图图形形、指指向向线线、文文字字说说明明来来表表示示数数据据处处理理的的步步骤骤,形形象象描描述述逻逻辑辑控控制制结结构构以以及及数数据据流流程程的的示示意意图图。流流程程图图具具有简洁、明了、直观的特点。有简洁、明了、
78、直观的特点。红盯篷臆突澄莉攒宣内辈雍高慈窿尽峪吟刘慰息巩府举血轩团晶怎序嗡哥计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计v2 2流程图符号表示流程图符号表示(1)起止框:表示程序的开始和)起止框:表示程序的开始和结束。结束。起止框起止框(2)判断框)判断框(3)处理框)处理框 (4)调用框)调用框(5)指向线)指向线/流向线流向线(6)连接框)连接框 返回返回返回返回呵酥棚飘夫鹏莱天无吼辊拴堪窿唆眠霄誉优砚们心擞缕儒灌务心特纺空录计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计-
79、 -顺序结构程序设计顺序结构程序设计v5.6顺序结构程序设计顺序结构程序设计顺序结构程序从开始到结束,一直是按指令序列的在主存的存放顺序顺序结构程序从开始到结束,一直是按指令序列的在主存的存放顺序 来执行指令的,且每条指令只执行一次。来执行指令的,且每条指令只执行一次。例子:课本例子:课本P197例例5-2v 5.7 分支程序设计分支程序设计 在实际应用中,常需要在程序运行过程中,依据不同情况,在几个程在实际应用中,常需要在程序运行过程中,依据不同情况,在几个程序,需要根据情况在程序段中选择其一,这就是分支程序。为了实现序,需要根据情况在程序段中选择其一,这就是分支程序。为了实现分支程序,有很
80、多程序流向控制和转移的指令。转移指令是实现分支分支程序,有很多程序流向控制和转移的指令。转移指令是实现分支的必要条件。的必要条件。 1、转移指令、转移指令 在程序中,指令的执行顺序由在程序中,指令的执行顺序由CS和和IP的内容决定,转移指令通过改变的内容决定,转移指令通过改变CS和和IP的内容,使程序改变执行顺序。在同一个段内转移,只需修改的内容,使程序改变执行顺序。在同一个段内转移,只需修改IP,不同段之间转移,则,不同段之间转移,则CS和和IP都需要修改。都需要修改。 按功能分为无条件转移指令和条件转移指令。都不影响任何标志位。按功能分为无条件转移指令和条件转移指令。都不影响任何标志位。
81、v (一)无条件转移指令(一)无条件转移指令 指令格式:指令格式:JMP 目标地址目标地址执行执行JMP指令后,就到指令后,就到“目标地址目标地址”指向的指令执行,而不执行下一指向的指令执行,而不执行下一条条 指令。无论是段内转移还是段间转移,目标地址都有两种表示方法:指令。无论是段内转移还是段间转移,目标地址都有两种表示方法:葫刘土胸野军控殷涧实磕将惧彪屿御豁堡即屿讼织乐帜钮掐勾馏强拧迹甩计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计(1)直接寻址方式:)直接寻址方式:JMP指令直接给出目标地址,通常用目
82、标处的指令直接给出目标地址,通常用目标处的标号表示;标号表示;段内直接寻址转移段内直接寻址转移执行的操作是:执行的操作是:IP(IP)+RD,RD是相对位移量,不影响标志位。是相对位移量,不影响标志位。 段间直接寻址转移:执行段间直接寻址转移:执行JMP指令时,将目标处指令地址的段基值指令时,将目标处指令地址的段基值和偏移量直接送入和偏移量直接送入CS和和IP中。中。 CODE1 SEGMENT JMP FAR PTR LABF CODE1 ENDS JMP L1 MOV AX,0 L1: ADD AX,0FFH RD1 L2: INC CX JMP L2 SUB AX,0 RD2(a)正向移
83、动正向移动(b)负向移动负向移动将将LABF所在段段所在段段基值和基值和LABF标号标号的偏移量送入的偏移量送入CS和和IP中。中。框承笺阅姓撅晨鲤衰窥伸御聪唤杆践找组聋馋序业狞慌房死堆韶织款临堵计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计 CODE2 SEGMENT LABF: MOV AX,0 CODE2 ENDS (2)间接寻址方式间接寻址方式段内间接寻址转移段内间接寻址转移 JMP指令的目标地址放在一个指令的目标地址放在一个16位通用寄存器位通用寄存器/字存储单元中。字存储单元中。 JMP BX;
84、IP(BX) JMP WORD PTR SI;IP(SI指向字单元指向字单元) 用用PTR表明表明SI所指向的单元按字访问所指向的单元按字访问段间间接寻址转移(需修改段间间接寻址转移(需修改CS和和IP内容):内容):这种寻址转移的目标地址是存放在一个作地址指针的双字单元中。这种寻址转移的目标地址是存放在一个作地址指针的双字单元中。 JMP DWORD PTR ADR1; IP(ADR1),CS(ADR1+2) 存放在双字单元的前存放在双字单元的前2个字单元的偏移量送入个字单元的偏移量送入IP,后,后2个字单元的段基个字单元的段基值送值送CS,实现段间的程序转移。,实现段间的程序转移。谷诱截厘
85、姿店诌镰隔大淆紊悠鸭聘露讼专虫藏怔锯框山坦仍禄枪侍所酮跺计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计v(二)条件转移指令(二)条件转移指令8086/8088指令系统中条件共指令系统中条件共18条。条件转移指令基本格式为:条。条件转移指令基本格式为: J X X 目标目标其中,其中,XX表示转移条件,目标地址通常使用标号。执行的操作是:条表示转移条件,目标地址通常使用标号。执行的操作是:条件满足时,则件满足时,则IP(IP)+RD;否则,顺序执行下一条指令。否则,顺序执行下一条指令。受影响的状态标志位:无。
86、受影响的状态标志位:无。 JZ OK MOV AX,1 OK: MOV AX,0 条件转移的范围只能是段内,且条件转移的范围只能是段内,且RD只能是一个用补码表示的只能是一个用补码表示的8为二进为二进制的带符号数,因此转移范围是制的带符号数,因此转移范围是-128127个字节。条件转移指令的目个字节。条件转移指令的目标代码均是标代码均是2字节长。字节长。条件转移指令可分为三大类:条件转移指令可分为三大类:(1)简单条件转移指令)简单条件转移指令 将单个标志位的状态作为条件来判断,以决定是否转移。这种指令共将单个标志位的状态作为条件来判断,以决定是否转移。这种指令共RD磅乘肆餐岩诛颧雹斡墙慎腿藻
87、鳞铂翌羡宋媳让腐贴界韶肋冻篷穿哆披允楞计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计有有5对,分别对对,分别对5个标志位个标志位CF、ZF、SF、OF、PF的两种状态进行判断。的两种状态进行判断。 例:编写程序段判断字节变量例:编写程序段判断字节变量DB1内容是正还是负,若为正,将内容是正还是负,若为正,将AL置置0,否则,否则,将将AL置置1。 程序段程序段1如下:如下:谁薄菊关源澄缝嘲仇菲辙圾馁浆赊灵廷撼誊蛤霖壕污恿桥舀埂危熏瞄斧趾计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编
88、语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计TEST DB1,10000000B JZ L1 MOV AL,0FFH JMP L2 L1: MOV AL,00H L2: 程序段程序段2如下:如下: MOV BL,DB1 SHL BL,1 JNC L1 MOV AL,0FFH JMP L2 L1: MOV AL,00H L2: 慰捅鹏滤衫致魁鄂听鸥厦佩焊咀妒删伞剖愉嗅杖瘤逼神肿捕倾门稀占尿徊计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计(2)无符号数条件转移指令)无符号数条件转移指令这组常用
89、于判断两个无符号数的大小,其判断条件是这组常用于判断两个无符号数的大小,其判断条件是CF、ZF的状态组的状态组合。假设有两个无符号数合。假设有两个无符号数A、B,在条件转移指令前用,在条件转移指令前用CMP指令比较指令比较A、B,即按,即按A-B设置各位标志。设置各位标志。 例如:编写一程序,找出三个字变量例如:编写一程序,找出三个字变量DW1、DW2、DW3中的最大数,中的最大数,并送入并送入AX中。程序段如下:中。程序段如下: MOV AX,DW1 CMP AX,DW2 JAE BIGER MOV AX,DW2诉湍龄剥佛济咱损妊勺咳枉寞审弦鼎春该撕婪僻卞楷卤绩恕逛泄侦液钞皋计算机组成原理与
90、汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计 BIGER:CMP AX,DW3 JAE NEXT MOV AX,DW3 NEXT: . (3)带符号数条件转移指令带符号数条件转移指令 假设有两个带符号数假设有两个带符号数A、B,在条件转移指令前用,在条件转移指令前用CMP指令比较指令比较A、B,即按,即按A-B设置各标志位。这组转移指令的判断条件是设置各标志位。这组转移指令的判断条件是SF、OF、ZF状状态的组合,其功能如下:态的组合,其功能如下: 烁罐靠独撑熬尽排颂沏寻衅蔓馏喇肚移碑禹淆月择讼峪和芹窍醒溜肥蛹赠计算机组
91、成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计 例如:对例如:对11111111B和和00000000B两个两个8位二进制数进行比较,若将它位二进制数进行比较,若将它们看作无符号数,则前者们看作无符号数,则前者后者(后者(2550);若将它们看作带符号数,);若将它们看作带符号数,则前者则前者后者(后者(-1=B MOVY,-1;X 0时,时,-1Y JMPEXIT傻甄炕咋豆五寐酶览重制吧善疑迢驻驴踩辣界屁西朔冀软品杏曳感待料靖计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编
92、语言程序设计设计- -分支程序设计分支程序设计A1: JGA2;X0转转A2 MOVY,0;X=0时,时,0Y JMPEXITA2: MOVY,1;X0,1Y EXIT: MOVAH,4CH INT21H CODE ENDS ENDSTARTv二、用跳转表实现多路分支二、用跳转表实现多路分支v【例【例5-6】设某程序有】设某程序有8路分支,试根据给定的路分支,试根据给定的N值(值(18),将程序的执),将程序的执 行转移到其中的一路分支。行转移到其中的一路分支。 程序流程如下图所示。程序流程如下图所示。 烘函姬逊暗濒扫闻吃恤界锅骂个猜姬萄声装坝拙棺谬乾捂泽颂砸美宋姻忿计算机组成原理与汇编语言程
93、序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计蕊淫瞩淑看咨逮啼促位忽蓟径征帜秦瓶箱抱誉判驹隅截冯烽篆歪淖奇宙微计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计v程序如下:程序如下: DATA SEGMENT TAB DW P1,P2,P3,P4,P5,P6,P7,P8 N DB 5 DATA ENDS STACK SEGMENT DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STAC
94、K,CS:CODE START:MOVAX,DATA MOVDS,AX MOVAL,N DELAL善娱俘衰惕舞砰累勇筒缝巧仟杆漠彪吐晕易看疮倍奎剁幅屹柏杨兴珐隙抛计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计- -分支程序设计分支程序设计 ADDAL,AL MOVBM,AL MOVBH,0 JMPTABBX P1: JMPEXIT P2: JMPEXIT P3: JMPEXIT P8: 帖北吟谓忠玻温壁账徽皇袭末饲拷荔韧纳拯庸吩晌撵菜乐道贮换敷书沽赃计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编
95、语言程序设计设计- -分支程序设计分支程序设计EXIT:MOVAH,4CH INT21H CODEENDS ENDSTART 上上述述程程序序中中的的无无条条件件转转移移指指令令的的转转移移地地址址采采用用的的是是变变址址寻寻址址。同同理理,转转移移地址也可以用寄存器间接寻址或基址加变址寻址,见课本地址也可以用寄存器间接寻址或基址加变址寻址,见课本210页例页例5-7。v 5.8 循环循环程序设计程序设计v5.8.1 循环控制指令循环控制指令v5.8.2 循环程序的结构及循环控制方法循环程序的结构及循环控制方法v5.8.3 单重循环程序设计单重循环程序设计v5.8.4 多重循环程序设计多重循环
96、程序设计闯兰掩庶牛挎屑摄岸钻订攒贩恭辑梆牲烤筷褥员哮日迈胡微僵蘑弘促举嗜计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计v5.8 循环程序设计循环程序设计v5.8.1循环控制指令循环控制指令循环控制指令属于转移类指令,其功能类似于条件转移指令。循环控制指令属于转移类指令,其功能类似于条件转移指令。这组指令有这组指令有3条,均为两个字节指令,并使用条,均为两个字节指令,并使用CX作循环次数计作循环次数计数器。执行的操作是:数器。执行的操作是:1)CX(CX)-12)循环控制条件满足时,则循环控制条件满足时,则IP(I
97、P)+RD;否则,顺序执行。否则,顺序执行。v1、LOOP指令指令指令格式:指令格式:LOOP 目标地址目标地址执行步骤是:执行步骤是:1) CX(CX)-12)若(若(CX)不等于)不等于0,则转移到标号代表的指令地址;否则,顺序执行。,则转移到标号代表的指令地址;否则,顺序执行。受影响的标志位无。受影响的标志位无。狱冬另丽呕浴霓廖俯犊潦抗痊赁靡帅底艘形所浸狡契梆映洪悟杆酋木剧立计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计 例如:要求从例如:要求从ARRAY数组的数组的10个无符号数中找出最大者送个无符号数中
98、找出最大者送MAX单元。单元。如用如用LOOP指令实现循环,则源程序如下:指令实现循环,则源程序如下: DATA SEGMENT ARY DB 17,5,40,0,67,12,34,78,32,10 MAX DB ? DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY MOV CX,9 MOV AL,SI 貌被杰寨佩逐秋识憾郧帚帐泅畸挠费纶
99、难积迪坏邀坝爹辣端棚娟嘿躺近绳计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计 LOP: INC SI CMP AL,SI JAE BIGER MOV AL,SI BIGER: LOOP LOP MOV MAX,AL MOV AH,4CH INT 21Hv2、LOOPE/LOOPZ指令指令指令格式:指令格式:LOOPE 目标地址目标地址 LOOPZ 目标地址目标地址1)CX(CX)-12)若()若(CX)不等于)不等于0且且ZF1,则转移到标号代表的指令地址;否则,则转移到标号代表的指令地址;否则,顺序执行。顺序执
100、行。受影响的标志位:无。受影响的标志位:无。例如:例例如:例5-9,见,见P214。潘奎蒋栈慈寸饮坤下爬剧踪逛衡烩毒丘林动裙刽将腾约愤牲辆砷络挖臃扒计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计v3、LOOPNE/LOOPNZ指令指令指令格式:指令格式:LOOPNE 目标地址目标地址 LOOPNZ 目标地址目标地址1)CX(CX)-12)若(若(CX)不等于)不等于0且且ZF0,则转移到标号代表的指令地址;否则,则转移到标号代表的指令地址;否则,顺序执行。顺序执行。受影响的标志位:无。受影响的标志位:无。例如:例
101、例如:例5-10,见,见P215。v4、JCXZ指令指令指令格式:指令格式:JCXZ指令首先测试指令首先测试CX的内容,如(的内容,如(CX)0,则转移到目标处,否则顺序,则转移到目标处,否则顺序执行下一条指令。执行下一条指令。这条指令实际上是条件转移指令,但它转移有用在循环程序中,所以这条指令实际上是条件转移指令,但它转移有用在循环程序中,所以我们把他作为循环程序控制指令之一。我们把他作为循环程序控制指令之一。为什么会有这条指令呢?为什么会有这条指令呢?当某一循环程序的循环次数初值(在当某一循环程序的循环次数初值(在CX中)是中)是0时,那么不应该执行循环,否时,那么不应该执行循环,否则将产
102、生非常大的循环次数(因为第一次逆向计数是则将产生非常大的循环次数(因为第一次逆向计数是:(:(CX)10-10FFFFH)。为了避免这种情况,对循环次数进行测试。)。为了避免这种情况,对循环次数进行测试。渊峭褒孵凡肖宙钵恍强飞幌脐霸出评形弓捧丘增陀瓶窗彦聘殷葡歇苑踪屑计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计v5.8.2循环程序的结构及循环控制方法循环程序的结构及循环控制方法v一、循环程序的结构(通常由一、循环程序的结构(通常由5部分组成)部分组成)1、初始化部分、初始化部分 设置循环的初始值,如地址指针和计
103、数器的初值,其它循环参数起始设置循环的初始值,如地址指针和计数器的初值,其它循环参数起始值等。只执行一遍。值等。只执行一遍。2、工作部分、工作部分 循环程序完成具体操作、运算的主体,也是设计循环程序的目的体现。循环程序完成具体操作、运算的主体,也是设计循环程序的目的体现。3、修改部分、修改部分 为执行下一次循环而修改的某些参数,如地址指针、计数器等。要修改为执行下一次循环而修改的某些参数,如地址指针、计数器等。要修改的参数通常是有一定的规律的,如的参数通常是有一定的规律的,如+1,-1,+2,-2 4、控制部分、控制部分 判断条件是否成立,控制循环是否结束。常用的是计数和条件控制循判断条件是否
104、成立,控制循环是否结束。常用的是计数和条件控制循环。环。5、结束处理部分、结束处理部分 处理循环结束后的结果。有的程序结束循环有几种可能情况,这时就处理循环结束后的结果。有的程序结束循环有几种可能情况,这时就要判断循环是在哪种情况下结束的,再分别给予处理,或存储结果。要判断循环是在哪种情况下结束的,再分别给予处理,或存储结果。v图图5-12给出了典型的两种循环程序结构形式给出了典型的两种循环程序结构形式“先工作后判断先工作后判断”和和“先判断先判断后工作后工作”。即。即“”任柑啮牌真阑绥苑署堂骄馒真绞拙一此冤崔束赴辑禄笑忿钱帐战凹抨迁镭计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程
105、序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计初始化部分初始化部分工作部分工作部分修改部分修改部分结束处理部分结束处理部分循环结循环结束束Y初始化部分初始化部分工作部分工作部分修改部分修改部分结束处理部分结束处理部分循环结循环结束束NNY建立循环的初始状态建立循环的初始状态循环体循环体控制部分控制部分(a)先工作后判断先工作后判断循环结构循环结构(b)先判断后工作先判断后工作循环结构循环结构DO 循环体循环体 UNTIL 条件条件WHILE 条件条件 DO 循环体循环体椰范扬怠烽侗拙螺蘸豪五具内稠大粳五豪醋孤淖职婚监恤呀学循窝潭慰泳计算机组成原理与汇编语言程序设计计算机
106、组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计v二、循环控制方法单重循环程序设计二、循环控制方法单重循环程序设计1、计数控制循环、计数控制循环 要求:循环的次数已知。要求:循环的次数已知。 选用选用CX作计数器,且是递减,可选用作计数器,且是递减,可选用LOOP/LOOPE/LOOPNE指令,否则应选指令,否则应选用用INC/DEC和条件转移指令进行计数。和条件转移指令进行计数。例如:例如:5-12,见课本,见课本P220。2、条件控制循环、条件控制循环不知道循环次数时,可以用。知道也可以用条件简化程序。不知道循环次数时,可以用。知道也可以用条件简化
107、程序。例:试编写一程序,将字单元例:试编写一程序,将字单元VARW中含中含1的个数放入的个数放入CONT单元中。单元中。循环的结束本可以用计数到循环的结束本可以用计数到16来控制,但由于来控制,但由于VARW中的低位可能为中的低位可能为0,为了减,为了减少循环次数,更好地方法是以判断移位之后的数是不是为少循环次数,更好地方法是以判断移位之后的数是不是为0作为循环结束的条作为循环结束的条 件。(甚至有可能件。(甚至有可能VARW为为0)DATA SEGMENT VARW DW 1101010010001000B CONT DB ? DATA ENDS STACK1 SEGMENT PARA ST
108、ACK DW 20H DUP(0) STACK1 ENDS坤篮箔怕馋斜铣垮黄椎宝会迎曝隐浅溯透兢柔鞠瑚哼局叠章嫁宦玩岿迄磨计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计 CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV DL,0 MOV AX,VARW LOP: CMP AX,0 JE NEXT JNS SHIFXT INC DL SHIFXT: SHL AX,1 JMP LOP NEXT: MOV CONT
109、,DL MOV AH,4CH INT 21H CODE ENDS END START价庐镰抗暇矣心恋牺买哺窑酒内蔬辞撞容返础揉脾乡琶集吨密爪蜕膝设乾计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计循环循环程序设计程序设计开始开始初始化:初始化:DL0,AX(VARW)AX=0计计1个数:个数:DL(DL)+1AX左移一位左移一位存结果存结果CONT(DL)结束结束(AX)15=1NYv三、多重循环程序设计三、多重循环程序设计见课本。见课本。堆军筑茎毒轮凿户帘须剧忿咒蛀蹋等疹牟快实傈兔棵冀奥历普纹姐案迸浆计算机组成原理与汇编语言程序设计计算
110、机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计v5.9子程序设计子程序设计 子程序的定义子程序的定义 子程序的调用与返回子程序的调用与返回 子程序设计要求子程序设计要求 子程序设计举例子程序设计举例v一、子程序的定义一、子程序的定义v过程定义伪指令语句格式如下:过程定义伪指令语句格式如下:过程名过程名 PROC NEAR/FAR RET 过程名过程名 ENDP过程必须设置在一个代码段内。过程必须设置在一个代码段内。过程名必不可少,为标识符过程名必不可少,为标识符过程名有过程名有3个属性:段基值、偏移量、类型属性(不指定,默认为个属性:段基值、偏移量、类
111、型属性(不指定,默认为NEAR)。)。一个过程至少要有一个一个过程至少要有一个RET指令句。指令句。 伐权帆塑淖科绊贺擂致瘸遗铂燕先贰少妨偷歹书笼睹恳寥雅窿凝范哀孩血计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计v二、子程序的调用与返回二、子程序的调用与返回v例:图例:图5-17v一、调用指令一、调用指令指令格式:指令格式:CALL 过程名过程名/子程序名子程序名过程名过程名/子程序名就是子程序的入口处的符号地址。执行子程序名就是子程序的入口处的符号地址。执行CALL指令时,指令时,首先保留断点地址于堆栈中,然后程序
112、转移到指定的子程序入口地址。首先保留断点地址于堆栈中,然后程序转移到指定的子程序入口地址。调用指令在寻找目标地址(子程序入口地址)时有两种寻址方式:直调用指令在寻找目标地址(子程序入口地址)时有两种寻址方式:直接寻址方式(直接调用)和间接寻址(间接调用)。接寻址方式(直接调用)和间接寻址(间接调用)。执行调用指令执行调用指令CALL时,时,CS:IP总是指向总是指向CALL指令的下一条指令(即指令的下一条指令(即返回地址),所以在堆栈中保留返回堆栈就是把返回地址),所以在堆栈中保留返回堆栈就是把IP的值(段内调用)的值(段内调用)或或CS与与IP的值(段间调用)压入堆栈。的值(段间调用)压入堆
113、栈。1、段内直接调用、段内直接调用返回地址的偏移量压栈,即(返回地址的偏移量压栈,即(IP)栈顶字单元栈顶字单元形成子程序入口地址形成子程序入口地址IP不影响标志位不影响标志位2、段内间接调用、段内间接调用子程序的入口地址放在子程序的入口地址放在16位通用寄存器或存储单元中。位通用寄存器或存储单元中。颗吻洒殉纽损悟光涂孤请栖创堆袱奢绽情赛砸栖遗嫁缚捉靳衔馁协记卫滋计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计例如:例如:CALL BX;(;(IP)堆栈,(堆栈,(BX)IPCALL WORD PTRSI; (IP)堆
114、栈,(堆栈,(SI指向字单元)指向字单元)IP 指令指针的内容指令指针的内容 子程序入口子程序入口3、段间直接调用、段间直接调用例如:例如:CALL FAR PTR PROCB; 返回堆栈压栈(返回堆栈压栈(CS)堆栈堆栈 CS (IP) 堆栈堆栈 子程序入口地址子程序入口地址 IP4、段间间接调用、段间间接调用 子程序的入口地址存放在一个双字存储单元中,低字节偏移量,高子程序的入口地址存放在一个双字存储单元中,低字节偏移量,高字节存段基值。字节存段基值。例:例:CALL DWORD PTR ADDR; 返回地址(返回地址(CS):(:(IP) 堆栈堆栈 子程序入口堆栈(子程序入口堆栈(ADD
115、R)IP (ADDR+2)CSv二、返回指令二、返回指令 子程序的类型属性与返回指令属性要求一致。子程序的类型属性与返回指令属性要求一致。坤匀惶宠棱销毡剿钻捏题沂瑶滞氏畏陕止挽灿怪浓酥瘦橡六勋襄吠腔内戴计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计1、段内返回、段内返回指令格式:指令格式:RET机器指令编码:机器指令编码:C3H功能功能:(栈顶字单元):(栈顶字单元)IP (SP)2IP 不影响标志位不影响标志位段内返回指令执行前后堆栈变化情况图:段内返回指令执行前后堆栈变化情况图:返回地址返回地址偏移量偏移量返回地
116、址返回地址偏移量偏移量SPSPIP(a)执行)执行RET指令前指令前(b)执行)执行RET指令后指令后赵蛔抚捅吸虱蛾凸骄隧差烙品掣搁摆沦诞骇厘锤娥罗破涂殖栈耀佃褒姿帧计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计2、段间返回、段间返回指令格式:指令格式:RET机器指令代码:机器指令代码:CBH功能:返回地址偏移量功能:返回地址偏移量IP 返回地址段基值返回地址段基值CS 不影响标志位不影响标志位段间返回指令执行前后堆栈变换情况图:段间返回指令执行前后堆栈变换情况图:返回地址返回地址段基值段基值SP(a)执行)执行RE
117、T指令前指令前返回地址返回地址偏移量偏移量返回地址返回地址段基值段基值SP(a)执行)执行RET指令后指令后返回地址返回地址偏移量偏移量IPCS证收少赘御遂烧橱殊聂蓄瞬亭靶彩屋槐尤座苇结件钎伦施蓟支翻就匈窍肥计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计3、带参数的返回指令、带参数的返回指令例:段内带参数返回指令例:段内带参数返回指令 RET n;返回地址偏移量;返回地址偏移量IP,(SP)+2SP (SP) + n SPv5.9.2子程序的设计要求子程序的设计要求编写子程序时要满足以下要求:编写子程序时要满足以下要
118、求:1、具有一定的通用性、具有一定的通用性2、主、子程序之间的参数传递方式:、主、子程序之间的参数传递方式:通用寄存器通用寄存器 简单、直接,但是可传递参数的数量受限制。简单、直接,但是可传递参数的数量受限制。存储单元传送存储单元传送 可传递参数的数量不受限制,但是段之间传送麻烦可传递参数的数量不受限制,但是段之间传送麻烦堆栈传送堆栈传送 不会受上面两种方法的限制,但是需特别注意在堆栈中参数存放的不会受上面两种方法的限制,但是需特别注意在堆栈中参数存放的顺序。顺序。 3、注意保存信息、注意保存信息伐耐蔬锗张骗尼氢迫腰低说卒惭矾棚皿杏毗浴盾局摩揉迎北实间炯闽侨瞄计算机组成原理与汇编语言程序设计计
119、算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计保存信息的方法:保存信息的方法:(1)在调用程序中保存信息)在调用程序中保存信息 例:主程序中用到例:主程序中用到BX、DI、SI,子程序用到,子程序用到SI、DI,则主程序调用,则主程序调用 子程序的形子程序的形式为:式为: PUSH SI PUSH DI CALL PROC_NAME POP DI POP SI (2)在子程序中保存信息)在子程序中保存信息例如:子程序中使用例如:子程序中使用BP、CX,子程序形式为:,子程序形式为: SUB1 PROC PUSH BP PUSH CX POP CX P
120、OP BP RET SUB1 ENDP 义绍谣吨念行传跳蹬丧得泛譬陡摹梨底剃例酗痔暑侩裙钦未鲜晌琶搽遇惭计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计4、正确使用堆栈、正确使用堆栈 执行调用指令中,返回地址压栈;如果子程序中,又使用堆栈的话,执行调用指令中,返回地址压栈;如果子程序中,又使用堆栈的话,则堆栈内容多,则返回时,应将则堆栈内容多,则返回时,应将SP指向正确的返回地址。指向正确的返回地址。 5、编写清晰的子程序文本、编写清晰的子程序文本 一个文本包括:一个文本包括:文本说明文本说明 1、子程序名、子程序名
121、2、子程序功能描述、子程序功能描述 3、子程序的入口参数与出口参数、子程序的入口参数与出口参数 4、使用哪些寄存器、存储单元、使用哪些寄存器、存储单元 5、本子程序是否又调用其它子程序、本子程序是否又调用其它子程序 6、子程序的调用形式举例、子程序的调用形式举例子程序本身子程序本身v5.9.3 子程序设计举例子程序设计举例例:将例:将8/16位二进制按位转换成它的位二进制按位转换成它的ASCII码串,并将转换结果存放到码串,并将转换结果存放到指定的存储单元中。采用主、子程序结构。指定的存储单元中。采用主、子程序结构。扩居盔寞庆尺搪谊闽竖钩肘辗攻寓枝慨谰困逸壁三君媳眉见公旱掂券颂怪计算机组成原理
122、与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计主程序:提供被转换的数,存放转换后的主程序:提供被转换的数,存放转换后的ASCII码串首址。码串首址。子程序:完成将二进制数转换成子程序:完成将二进制数转换成ASCII码串,从高位到低位以此转换。码串,从高位到低位以此转换。入口参数:将转换数据、位数,存放入口参数:将转换数据、位数,存放ASCII码结果首址。码结果首址。出口参数:无出口参数:无 该程序的数据段和堆栈段安排如下:该程序的数据段和堆栈段安排如下: DATA SEGMENT BIN8 DB 53H ;01010011B BI
123、N16 DW 0A84BH ASCBUF DB 20H DUP(0) DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS流程图见流程图见P232,图,图5-181、用寄存器传递参数、用寄存器传递参数入口参数:待转换数在入口参数:待转换数在DX中,待转换位数在中,待转换位数在AX中,存放结果中,存放结果ASCII码码首址在首址在DI中中 。癣赫种救保咱躯靳搂栖听谢也风落肿茎盗痰给蒸缘份砂竭僳再荫服碎抠挚计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计设计子子程序设计程序设计
124、信息保存由主程序定义。程序代码编制如下:见课本信息保存由主程序定义。程序代码编制如下:见课本P231。2、用堆栈传递参数、用堆栈传递参数在调用子程序前,将待转换数、位数,存放在调用子程序前,将待转换数、位数,存放ASCII码首址先后压入堆栈码首址先后压入堆栈中,保存信息的工作由子程序完成。程序代码段编制如下:中,保存信息的工作由子程序完成。程序代码段编制如下:见见P233页页3、用地址表传递参数、用地址表传递参数见见P234v5.9.4 系统功能子程序的调用系统功能子程序的调用1、DOS功能子程序的调用功能子程序的调用 DOS系统功能调用的方法一般可分为以下几步:系统功能调用的方法一般可分为以
125、下几步: 设置所要调用功能的入口参数。设置所要调用功能的入口参数。 在在AH寄存器中存入所要调用功能的功能号。寄存器中存入所要调用功能的功能号。 INT 21H指令自动转入中断子程序入口。指令自动转入中断子程序入口。 相应中断子程序运行完毕,可按规定取得出口参数。相应中断子程序运行完毕,可按规定取得出口参数。怖阂妖垢衍祟操扯泞离崩碎坊典乃爬载厄楷铰朗虾预腺蕴鼓钒绘饰皆岩团计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计常用的设计常用的DOSDOS系统功能调用系统功能调用主要功能:实现实现键盘输入、屏幕显示、磁盘读写、文件读写等。主要功能:实现
126、实现键盘输入、屏幕显示、磁盘读写、文件读写等。工作人员可以在不熟悉工作人员可以在不熟悉I/O设备功能情况下,设备功能情况下,DOS功能程序调用功能程序调用I/O设备设备实现实现I/O操作。操作。 调用时需要使用软中断指令:调用时需要使用软中断指令: INT nn为中断类型类型码为中断类型类型码 ,值为,值为00H0FFH执行的操作:执行的操作: 将将FR内容,返回地址(内容,返回地址(CS和和IP)压入堆栈。)压入堆栈。按类型码按类型码n,从中断向量表中取出功能子程序入口地址,从中断向量表中取出功能子程序入口地址CS:IP,执行子程序。执行子程序。功能子程序结束时,用中断返回指令功能子程序结束
127、时,用中断返回指令IRET返回调用程序。返回调用程序。DOS功能子程序调用格式为:功能子程序调用格式为:送入口参数到指定寄存器送入口参数到指定寄存器AH功能号功能号INT 21HDOS提供的系统功能子程序,是以中断类型码提供的系统功能子程序,是以中断类型码21H表示的。下面列举表示的。下面列举部分部分DOS功能子程序的功能和调用:功能子程序的功能和调用:趁油恋讶衰矩破耶迷笑赴佃既个详孽膛吩稻碘身睡香饭刹不踢恩巩钉傍甚计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计常用的设计常用的DOSDOS系统功能调用系统功能调用 1带显示的键盘输入(带显示
128、的键盘输入(1号功能)号功能)格式:格式:MOVAH,01H INT 21H功能:从键盘输入字符的功能:从键盘输入字符的ASCII码送入寄存器码送入寄存器AL中,并送显示器显示。中,并送显示器显示。 等待从键盘输入下一个键,把字符的等待从键盘输入下一个键,把字符的ASCII码送入码送入AL,并在屏幕上显,并在屏幕上显示该字符。示该字符。如果按如果按Ctrl+C组合键,则停止程序运行。组合键,则停止程序运行。按下按下TAB制表键,使光标到相应位置上。制表键,使光标到相应位置上。 2 .不带显示的键盘输入(不带显示的键盘输入(7号、号、8号功能)号功能) 调用格式:调用格式:MOV AH ,7H/
129、 AH ,8H INT 21H 功能与功能与1号基本类同,差异在于键盘输入的字符在屏幕上不显示。号基本类同,差异在于键盘输入的字符在屏幕上不显示。7号号功能对按功能对按Ctrl+C组合键和组合键和TAB制表键无反应。制表键无反应。 3.字符串输入(字符串输入(0AH号功能)号功能) 建立一个缓冲区,将要输入的一串字符串的建立一个缓冲区,将要输入的一串字符串的ASCII码存入。码存入。要求使用要求使用DS和和DX指向缓冲区首址。指向缓冲区首址。奶影妇鞍阔燎慢仲国回谭伐腹肌但算冯衫眩本孵于硅粮分夕圣坊伙怔住盎计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语
130、言程序设计常用的设计常用的DOSDOS系统功能调用系统功能调用 4、单字符显示(单字符显示(2号功能)号功能)在屏幕上显示单个字符。要显示字符的在屏幕上显示单个字符。要显示字符的ASCIIASCII码(入口参数)存放在码(入口参数)存放在DLDL中。中。注意:注意:2 2号功能可以显示任一字符,例如可显示号功能可以显示任一字符,例如可显示“$ $”符号,而符号,而9 9号功能号功能不能。不能。 5、单字符打印(单字符打印(5号功能)号功能)将将DL中的字符(中的字符(ASCII码)送打印机接口,打印输出。码)送打印机接口,打印输出。 6、字符串显示(、字符串显示(9号功能)号功能)在屏幕上显示
131、字符串。要显示的字符串必须先放在一数据区,且字符在屏幕上显示字符串。要显示的字符串必须先放在一数据区,且字符串以串以“$ $”符号作为结束编址。非显示字符可以用它的符号作为结束编址。非显示字符可以用它的ASCIIASCII码插入字码插入字符串中间。符串中间。进行进行9 9号功能调用,应先把待显示的字符串首地址的段基值和偏移量分号功能调用,应先把待显示的字符串首地址的段基值和偏移量分别送入别送入DSDS和和DXDX中。中。冷灌桔未喳理局兴效兄价箔嚷猖畅疾淤芬砰哉胸碘擅浙蔽调肥蛛湿猖崎殿计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计程序示例设计
132、程序示例例如:要求从键盘输入一串小写字母,转换成大写字母例如:要求从键盘输入一串小写字母,转换成大写字母后在屏幕上显后在屏幕上显示。源程序如下:示。源程序如下: DATA SEGMENT PMT1 DB Input small letter:$ STR1 DB 40H,0,40H DUP(0) PMT2 DB 0AH,0DH,Display capital letter: STR2 DB 40H DUP(0),$ DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,D
133、S:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET PMT1 MOV AH,9匪刨侮痹姨浩笋嘿循夹谜章刚予璃攫呈牙根纫帝耍控爵凡赶篓溶挪看庸挫计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计五、汇编语言程序五、汇编语言程序设计程序示例设计程序示例 INT 21H MOV DX,OFFSET STR1 MOV AH,10 INT 21H LEA SI,STR1+2 LEA DI,STR2 MOV CL,STR1+1 MOV CH,0 LOP1: MOV AL,SI SUB AL,20H MOV DI,AL INC SI INC DI LOOP LOP1 MOV DX,OFFSET PMT2 MOV AH,9 INT 21H MOV AH,4CH INT 21H城挤摈况抨矿阴周贰歉殷俊谐校破沈聂拯涵夜辖粥嚏诬歌斌笋盏熬溜疵经计算机组成原理与汇编语言程序设计计算机组成原理与汇编语言程序设计