




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基本程序设计第一页,共五十八页,编辑于2023年,星期日基本程序设计是使用单一结构的程序设计,它是程序设计的基础。程序有三种基本结构,即顺序结构、分支结构和循环结构。任何复杂的程序都是由基本结构组成的。因此,一定要掌握基本程序设计的方法。对于汇编语言程序设计而言,更要掌握好基本程序的设计,这是编写复杂程序的基础。
本章将分别介绍各种基本程序设计的方法及子程序的设计。4.1顺序程序设计4.2分支程序设计4.3循环程序设计实训一分支程序设计实训二循环程序设计第4章基本程序设计第二页,共五十八页,编辑于2023年,星期日顺序程序是最简单程序设计,这种程序不使用分支、循环结构,程序按顺序执行,只能完成相对简单的操作。限于这种特点,在进行顺序程序设计时应合理安排指令的先后顺序,以完成相应的功能。
在较为复杂的程序中,顺序程序是逐段出现,它主要完成一些简单操作或过程的准备、任务的过渡、结果的存储及程序结束等。它是程序的基本组成部分。以下以结合几个实例说明顺序程序的基本方法,它们是以后各种复杂程序设计的基础。4.1顺序程序设计返回本章首页进入下一节第4章基本程序设计第三页,共五十八页,编辑于2023年,星期日4.1.1存储单元内容移位存储单元移位是指其中的内容左移或右移若干位。现举例说明。
【例4.1】将AX寄存器中的内容左移2位,字存储单元DAT中的内容右移3位(移位后的空位补0).
分析:内容移位一般由移位指令实现,但要求移后空位为0,故应使用逻辑移位指令。当移位次数大于1时,可将移位次数放至CL中进行移位。操作如下:
MOV CL,2
SHL AX,CL
INC CL
SHR DAT,CL第4章基本程序设计第四页,共五十八页,编辑于2023年,星期日4.1.2乘法运算汇编语言本身也是比较灵活的,乘法运算可用乘法指令直接完成,有时候也可以由移位指令或加法指令完成。
【例4.2】将寄存器AL的内容乘10,结果存至DX寄存器。
分析:对一个数进行乘10运算,可以直接使用乘法指令实现,也可由移位指令或加法指令实现,方法分别如下:
1.用乘法指令实现
MOV BL, 10
IMUL BL ;AX←AL×BL=AL×10
MOV DX,AX第4章基本程序设计第五页,共五十八页,编辑于2023年,星期日2.用移位指令实现移位操作时,在最高位不变化时,左移一位,相当原数乘2,因此也可以用移位操作实现乘10运算。
XOR AH,AH ;AH清零
SAL AX,1 ;AX←AX×2
MOV BX,AX ;存至BX寄存器
MOV CL,2
SAL AX,CL ;AX←AX×8
ADD AX,BX ;AX←AX×10
第4章基本程序设计第六页,共五十八页,编辑于2023年,星期日3.用加法指令实现一个数与自己相加可以实现乘2运算,多次累加就可以实现乘10运算。
MOV AH,0
ADD AX,AX ;AX←AX×2
MOV BX,AX ;存至BX寄存器
ADD AX,AX ;AX←AX×4
ADD AX,AX ;AX←AX×8
ADD AX,BX ;AX←AX×10
第4章基本程序设计第七页,共五十八页,编辑于2023年,星期日4.1.3屏蔽与置位对字节或字变量中的某些位进行置0操作,称为屏蔽操作。使某些位强迫置1则是置位操作。它们是数据处理常用的方法。【例4.3】将字节类型变量DAT的高4位置0,其余各位保持不变。解:屏蔽操作多用逻辑运算指令实现.本例使用逻辑与指令完成。任何位与0相与,结果都为0,由此达到该位被屏蔽的目的。非屏蔽位应与1相与,以保证该位不变.
MOV AL,DAT
AND AL,0FH ;屏蔽高四位
MOV DAT,AX第4章基本程序设计第八页,共五十八页,编辑于2023年,星期日通过逻辑运算指令也很容易实现字或字节的置位操作。一般使用逻辑或指令实现置位操作。
例如把上例中DAT变量的高四位置1,用下面指令即实现即可:
OR DAT, 0F0H
第4章基本程序设计第九页,共五十八页,编辑于2023年,星期日4.1.4拆字与合字
【例4.4】将存储单元DAT中两位压缩的BCD数拆成二个非压缩BCD数(高位BCD数放在DAT+1单元,低位BCD数放在DAT+2单元)。
分析:将DAT单元中的BCD数拆开可用移位的方法。对高位BCD数可逻辑右移4位而成为非压缩数;低位BCD数可屏蔽其高四位而成为非压缩BCD数。指令如下:
MOV AL,DAT
MOV CL,4
SHR AL,CL ;得到高位BCD数
MOV DAT+1,AL
MOV AL,DAT
AND AL,0FH ;得到低位BCD数
MOV DAT+2,AL第4章基本程序设计第十页,共五十八页,编辑于2023年,星期日【例4.5】将存储单元DAT1和DAT2中分别存有两个非压缩的BCD数,将其合成一个压缩BCD数(DAT1单元为高位BCD数,DAT2单元为低位BCD数),结果存入DAT0单元。
分析:将两个单元中的BCD数合并可用加法指令与移位指令相结合的方法。其中高位BCD数可由DAT1单元数据逻辑左移4位得到;再与DAT2单元相加即可完成合并。指令如下:
MOV AL,DAT0
MOV CL,4
SHL AL,CL
ADD AL,DAT1
MOV DAT0,AL第4章基本程序设计第十一页,共五十八页,编辑于2023年,星期日4.1.5数据与ASCII码的相互转换编程中经常要用到数据显示的问题,通常的做法是将要显示的数据转换为ASCII码后,再调用相关的中断来显示。在二、十、十六等常用进制的数据中,最为复杂的是十六进制数据的显示,查阅ASCII表可知,数据0~9的ASC码为该数据加上30H,数据A~F的ASCII码为该数据加上37H。对于从键盘上输入的数据,由于是以ASCII码形式输入的,通常转换为数据本身再进行处理,其转换的方法较多,但通常的方法是上述过程的逆过程,即对30H~39H(0~9的ASC码)减去30H,数据41H~46H(A~F的ASCII码)减去37H。下面举例说明。第4章基本程序设计第十二页,共五十八页,编辑于2023年,星期日【例4.6】在字节存储单元DAT中有两位十六进制的数据为6AH,要求将该数据显示到屏幕上。
分析:要实现该十六进制数据的显示,一般是调用DOS或BIOS提供的中断,而这些中断几乎都要求将要显示的内容转换为ASCII码。以下用DOS系统功能调用的2号功能完成字符显示。程序如下:
DATA SEGMENT
DAT DB 6AH
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA
第4章基本程序设计第十三页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
MOV DL,DAT
MOV AL,DL ;暂存至AL寄存器
MOV CL,4
SHR DL,CL
ADD DL,30H ;高位十六进制数据‘6’转换为ASCII码
MOV AH,02H
INT 21H ;显示
MOV DL,AL
AND DL,0FH
ADD DL,37H ;低位十六进制数据‘A’转换为ASCII码
INT 21H ;显示
MOV AH,4CH
INT 21H
CODE ENDS
END START 第4章基本程序设计第十四页,共五十八页,编辑于2023年,星期日4.1.6简单算术运算【例4.7】在字存储单元A、B和C中分别存放着一个有符号数,求(C-89H+A×B)/A,商和余数分别存入字存储单元D和E。
分析:直接用有符号数运算指令完成即可。程序如下:
DATA SEGMENT
A DW -1234H
B DW 5678H
C DW 3456H
D DW ?
E DW ?
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA第4章基本程序设计第十五页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
MOV AX,C
SUB AX,89H
CWD ;扩展为双字
MOV CX,DX
MOV BX,AX ;结果暂存至CX,BX
MOV AX,A
IMUL B ;求A×B
ADD AX,BX
ADC DX,CX ;与前面结果相加
IDIV A ;AX是商,DX是余数
MOV D,AX
MOV E,DX ;保存结果
MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计第十六页,共五十八页,编辑于2023年,星期日4.1.7查表【例4.8】在以TABLE为首地址的内存中顺序存有0~10的平方数表。今从键盘上输入一个数(<11),求其平方值,结果保存至RSLT单元。
分析:因为平方表已顺序排放在内存中。又已知首地址TABLE,只要把输入数据作为位移量与首址相加,就指向了表中平方值的地址,取其内容即为该数的平方值。程序如下:
DATA SEGMENT
TABLE DB0,1,4,9,16,25,36,49,64,81,100
RSLT DB ?
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA第4章基本程序设计第十七页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
MOV AH,00H
INT 16H ;输入数据
AND AL,0FH ;将ASCII码转换为数据
XOR BX,BX
MOV BL,AL ;存至BX
LEA SI,TABLE
MOV AL,[SI+BX] ;查表
MOV RSLT,AL ;保存结果
MOV AH,4CH
INT 21H
CODE ENDS
END START返回本章首页第4章基本程序设计第十八页,共五十八页,编辑于2023年,星期日4.2分支程序设计分支程序使计算机具备判断能力,计算机可以根据给定的条件进行判断,并作出相应的处理,它可以把程序分成不同的处理段,实现情况不同的处理,从而使计算机具有一定的‘思维’能力。这是顺序程序所能不能实现的。所以,分支程序是程序的重要组成结构之一。汇编语言的分支主要由转移指令实现,而过多的转移指令会使程序的结构变得复杂,因而进行分支程序设计时进行合理安排是至关重要的。返回本章首页返回上一节进入下一节第4章基本程序设计第十九页,共五十八页,编辑于2023年,星期日4.2.1单重分支单重分支是最简单的分支结构,如果条件成立则完成某项操作,否则执行其它操作或后续指令。其结构可以用图4-1来表示。(a)条件不成立执行后续指令(b)条件不同执行不同操作
条件?
处理
Yes
No
条件?
处理2
Yes
No
处理1
第4章基本程序设计第二十页,共五十八页,编辑于2023年,星期日【例4.9】在存储单元DAT中存放着一位十六进制数,将其显示到屏幕上。
分析:本题只需对该位十六进制数进行判断,方法同例4.6相同。程序如下:
DATA SEGMENT
DAT DB 0CH
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA第4章基本程序设计第二十一页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
MOV AL,DAT
CMP AL,9
JG OTHR
ADD AL,30H ;小于10则转换为数字(0~9)
JMP DISP
OTHR: ADD AL,37H ;大于10则转换为大写字母(A~F)
DISP: MOV DL,AL
MOV AH,2
INT 21H
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计第二十二页,共五十八页,编辑于2023年,星期日【例4.10】在字节存储单元X、Y中各有一个无符号数。根据这两个无符号数的大小,在屏幕显示X≥Y或X<Y。
分析:两个无符号数比较大小常用的方法是使用比较指令CMP,根据其对标志位的影响用无符号条件转移指令实现转移。程序如下:
DATA SEGMENT
DAT0 DB 98H
DAT1 DB 0A0H
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA
第4章基本程序设计第二十三页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
MOV AL,X
CMP Y,AL ;比较
JA YGX ;X大则转YGEX
MOV AL,‘≥’
JMP DISP
YGX: MOV AL,‘<’
DISP: MOV DL,‘X’ ;显示比较结果
MOV AH,2
INT 21H
MOV DL,AL
INT 21H
MOV DL,‘Y’
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计第二十四页,共五十八页,编辑于2023年,星期日本例中,根据比较结果影响CF标志位。利用JA指令实现分支转移,即Y≥X时转YGDX。在分支处理中分别为显示结果作准备(分别准备显示X≥Y或X<Y)。DISP标号开始的程序段是用来显示结果的。第4章基本程序设计第二十五页,共五十八页,编辑于2023年,星期日4.2.2多重分支在程序设计中,更多的情况是对几个条件同时进行判断从而确定程序的转移方向,此时只能采用数个单重分支的组合来完成,这就是多重分支结构。
【例4.11】编写一程序,求:
X+10H (X<0)
Y= 32X (0≤X≤10)
X-90H (X>10)
其中X、Y都是有符号字变量
分析:本题有三个条件进行判断,故属于多重分支程序设计。在进行较为复杂的分支程序设计时,应先处理简单分支,再处理复杂分支,这样更方便编程。程序如下:
第4章基本程序设计第二十六页,共五十八页,编辑于2023年,星期日STACK SEGMENTPARASTACK‘STACK’
DB 100DUP(0)
STACK ENDS
DATA SEGMENT
X DW?
Y DW?
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,X
CMP AX,0
JGE CASE23
ADD AX,10H ;第一种情况的计算结果
JMP RESULT第4章基本程序设计第二十七页,共五十八页,编辑于2023年,星期日CASE23: CMP AX,10D
JG CASE3
MOV BX,30D
IMUL BX ;第二种情况的计算结果
JMP RESULT
CASE3: SUB AX,190H ;第三种情况的计算结果
RESULT: MOV Y,AX ;结果保存到变量Y中
MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计第二十八页,共五十八页,编辑于2023年,星期日4.2.3用地址表实现分支当程序分支比较复杂时,可将各分支的入口地址存于地址表中,以实现分支程序设计。
【例4.12】从键盘上输入一个数(<5),求其平方值,结果保存至RSLT单元。
分析:本题可用例4.8的方法,也可以用地址表实现。程序如下:
DATA SEGMENT
ADDR DW C0,C1,C2,C3,C4
RSLT DW ?
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA第4章基本程序设计第二十九页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
AGAIN: MOV AH,00H
INT 16H ;输入数据
CMP AL,’0’
JB AGAIN
CMP AL,’4’
JA AGAIN ;不在0~4之间,重新输入
AND AL,0FH ;ASCII码转换为数据
SHL AL,1 ;地址表为字类型,故乘2
XOR AH,AH
LEA BX,ADDR
ADD BX,AX
JMP WORDPTR[BX] ;用地址表实现分支第4章基本程序设计第三十页,共五十八页,编辑于2023年,星期日C0: MOV AL,0
JMP SAVE ;0的平方是0
C1: MOV AL,1
JMP SAVE ;1的平方是1
C2: MOV AL,2
MOV BL,AL
MUL BL
JMP SAVE ;2的平方是2*2
C3: MOV AL,3
MOV BL,AL
MUL BL
JMP SAVE ;3的平方是3*3
C4: MOV AL,4
MOV BL,AL
MUL BL ;4的平方是4*4
SAVE: MOV RSLT,AX ;保存
MOV AH,4CH
INT 21H
CODE ENDS
END START返回本章首页第4章基本程序设计第三十一页,共五十八页,编辑于2023年,星期日4.3循环程序设计在进行程序设计时,会出现某段程序反复多次执行的情况,如果这段程序是连在一起反复执行的,则可用循环程序结构来实现。其方法是用重复次数或某个条件控制循环程序的执行。采用循环程序结构不仅使程序变得简洁清晰,而且减少程序对内存的占用,因此,循环程序是重要的程序结构之一。返回本章首页返回上一节进入下一节第4章基本程序设计第三十二页,共五十八页,编辑于2023年,星期日4.3.1循环程序的结构循环程序是多种多样的,但一般认为循环程序由四部分构成:
1.初始化部分
本部分主要为循环程序作准备工作,如置循环次数、地址指针或关键字,寄存器置初值及标志位设置等。
2.循环工作部分
本部分是实际进行工作的部分,是循环结构的主体。
3.参数调整部分
本部分实现地址指针或循环次数的修改等,以便继续循环。
4.循环控制部分
本部分循环条件的检查,以判断是否继续循环。
以上四部分中,2、3、4有时统称为循环体。循环程序根据循环控制条件的不同,通常又分两种结构,如图4-2所示。第4章基本程序设计第三十三页,共五十八页,编辑于2023年,星期日(a)先工作后判断循环条件该结构为后判断型循环,循环次数已知,多用LOOP指令等构造循环。
初始化
循环条件满足?
处
理
Yes
No
第4章基本程序设计第三十四页,共五十八页,编辑于2023年,星期日(b)先判断循环条件后工作该结构为先判断型循环,循环次数未知,多用条件转移指令构造循环。
初始化
No
循环条件满足?
处理
Yes
第4章基本程序设计第三十五页,共五十八页,编辑于2023年,星期日4.3.2单重循环单重循环程序结构,程序中只有一个循环体,循环体内不再含有其它循环体,下面举例说明。
【例4.13】求1~400的所有偶数的和,结果保存到RSLT存储单元。
分析:1~400间共有200个偶数,故需要加200次,也就是说循环次数为200。由于程序中CX寄存器同时充当了循环计数器和200个偶数值,使每一次循环CX的值减2,故CX初值为400。程序如下:
DATA SEGMENT
RSLT DW ?
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA 第4章基本程序设计第三十六页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
MOV CX,400
XOR AX,AX
NEXT: ADD AX,CX ;计算偶数和
DEC CX
DEC CX
JNZ NEXT ;200个数未完则继续循环
MOV RSLT,AX ;保存结果
MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计第三十七页,共五十八页,编辑于2023年,星期日【例4.14】在以DAT为首地址的字缓冲区中存有一批数据,数据个数为10,编程找出其最大的值,结果存入RSLT单元。
分析:求最大值通常采用逐个比较法,即把第一个数做比较标准,与其后的数比较。如标准数大,则再与下一个数比较;如果标准数小,则取大数做标准数。由于循环次数已知,故可采用图4-2(a)的结构。程序如下:
DATA SEGMENT
DAT DW 1234H,0ABH,0ABCDH,9999H,0
DW 1,5678H,0BBCCH,9876H,5678H
RSLT DW ?
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA第4章基本程序设计第三十八页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
LEA SI,DAT ;SI做地址指针
MOV AX,[SI]
MOV CX,9 ;10个数共比较9次
INC SI
INC SI
NEXT: CMP AX,[SI]
JGE GOON ;AX大于下一个数则转GOON
MOV AX,[SI] ;否则将大值付给AX
GOON: INC SI
INC SI ;修改地址指针
LOOP NEXT ;循环
MOV RSLT,AX ;保存结果
MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计第三十九页,共五十八页,编辑于2023年,星期日【例4.15】在以DAT为首地址的字缓冲区中存有一批数据,以‘*’作为结束,编程找出其最大的值,结果存入RSLT单元。
分析:本例与例4.14的不同在于数据个数未知,但有一个条件知道,就是该批数据以‘*’结束,故属于条件控制循环,循环次数未知的结构,即图4-2(b)的结构。程序如下:
DATA SEGMENT
DAT DW 1234H,0ABH,0ABCDH,9999H,0,1111H,1010H
DW 1,5678H,0BBCCH,9876H,5678H,0FFH,‘*’
RSLT DW ?
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA第4章基本程序设计第四十页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA
MOV DS,AX
LEA SI,DAT ;SI做地址指针
MOV AX,[SI]
NEXT: CMP WORDPTR[SI],‘*’
JZ SAVE
CMP AX,[SI]
JGE GOON ;AX大于下一个数则转GOON
MOV AX,[SI] ;否则将大值付给AX
GOON: ADD SI,2
JMP NEXT ;循环
SAVE: MOV RSLT,AX ;保存结果
MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计第四十一页,共五十八页,编辑于2023年,星期日4.3.3多重循环程序设计中,有时单重循环不能完成一项工作,需用多重循环完成。多重循环就是循环体内含有其它循环体的结构,也称为循环嵌套。多重循环以双重循环最为常用,内外层的循环由程序员用跳转指令控制,要注意不同循环体之间的界限。
第4章基本程序设计第四十二页,共五十八页,编辑于2023年,星期日0123456789ABCDEF
123456789ABCDEF0
23456789ABCDEF01
3456789ABCDEF012
456789ABCDEF0123
56789ABCDEF01234
6789ABCDEF012345
789ABCDEF0123456
89ABCDEF01234567
9ABCDEF012345678
ABCDEF0123456789
BCDEF0123456789A
CDEF0123456789AB
DEF0123456789ABC
EF0123456789ABCD
F0123456789ABCDE
【例4.16】在以STRG为首地址的缓冲区中存放着十六进制各位“0”~“F”的ASCII码,编程以下面的格式将这些数据显示到屏幕上。第4章基本程序设计第四十三页,共五十八页,编辑于2023年,星期日分析:本题用双重循环程序实现是非常恰当的,内循环实现每行18个数据的显示(含回车与换行的ASCII码),外循环则控制显示的行数16。程序如下:
DATASEGMENT
STRG DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H,46H
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H,46H
DATAENDS
CODE SEGMENT
ASSUMECS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DI,16 ;显示行数为16
XOR BX,BX ;BX清零第4章基本程序设计第四十四页,共五十八页,编辑于2023年,星期日NEXT: LEA SI,STRG
ADD SI,BX ;BX寄存器用于调整数据位置
MOV CX,16 ;每行显示数据数
MOV AH,2
DISP: MOV DL,[SI]
INT 21H
MOV DL,’’ ;数据间以空格相间隔
INT 21H
INC SI
LOOP DISP ;内循环
MOV DL,0AH ;换行
INT 21H
MOV DL,0DH ;回车
INT 21H
INC BX
DEC DI
JNZ NEXT ;外循环
MOV AH,4CH
INT 21H
CODE ENDS
END START第4章基本程序设计返回本章首页第四十五页,共五十八页,编辑于2023年,星期日实训一分支程序设计实训内容:在存储单元DAT中存放着一个字节数据,判断其是否为十六进制数据,如是,则将其以十六进制形式显示到屏幕上,否则显示“NotHexadicimal”信息。分析:本题只需对该数据进行判断,如果大于等于0且小于等于15,则是十六进制数据,转换为相应的ASCII码即可显示。方法同例4.9相似。如果不在上述范围内,则显示非十六进制信息。显然这是一个分支程序。上机前,应在硬盘上建立MASM子目录,并将EDIT编辑程序、MASM汇编程序、LINK连接程序和DEBUG调试程序拷贝至该子目录下(注:也可拷贝具有相似功能的其它版本的汇编调试程序)。整个上机过程如下:第4章基本程序设计第四十六页,共五十八页,编辑于2023年,星期日1.画出程序流程图如图4-3所示AL←AL+37H显示非十六制数据信息Y开始数据放入ALAL←AL+30H≥0?>9?≦15?YNYNN显示结束图4-3实训一程序流程图第4章基本程序设计第四十七页,共五十八页,编辑于2023年,星期日2.用编辑程序编辑源程序设源程序名为SX1A.ASM.注意:源程序的扩展名必须是.ASM。编辑如下: C:\MASM\EDITSX1A.ASM在编辑环境下编辑源程序。参考源程序如下:DATA SEGMENT DAT DB 0CH MSG DB ‘NotHexadicimal.$’ DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA第4章基本程序设计第四十八页,共五十八页,编辑于2023年,星期日START: MOV AX,DATA MOV DS,AX MOV AL,DAT CMP AL,0 JL DISP2 ;小于0则转到DISP2 CMP AL,9 JG OTHER ADD AL,30H ;小于10则转换为数字(0~9)的ASCII码
JMP DISP1OTHER:CMP AL,0FH JG DISP2 ;大于15则转到DISP2 ADD AL,37H ;大于10则转换为大写字母(A~F)的ASCII码DISP1: MOV DL,AL MOV AH,2 INT 21H JMP DONEDISP2: LEA DX,MSG ;显示“NotHexadicimal.”信息
MOV AH,9 INT 21HDONE: MOV AH,4CH INT 21HCODE ENDS END START第4章基本程序设计第四十九页,共五十八页,编辑于2023年,星期日3.汇编源程序输入以下命令行并按回车键:C:\MASM\MASMSX1AMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Sourcefilename[.ASM]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:51698+417454Bytessymbolspacefree0WarningErrors0SevereErrorsMASM汇编程序对源程序进行二次扫描检查,如无误,则形成SX1A.OBJ目标文件。如果有错误,则提示错误出处和错误原因。大家也可以通过列表文件检查错误。如果源程序有错误,则在EDIT中进行修正,重新汇编,直至正确无误。第4章基本程序设计第五十页,共五十八页,编辑于2023年,星期日4.连接目标文件形成可执行文件输入以下命令行并按回车键:C:\MASM\LINKSX1AMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.ObjectModules[.OBJ]:myfileRunFile[MYFILE.EXE]:ListFile[NUL-MAP]:Libraries[.LIB]:Warning:nostacksegment则目标程序被连接为可执行的.EXE文件。系统最后一行有一个警告信息,表示程序中没有堆栈段,这并不影响程序的正常执行,因为操作系统会自动为用户程序分配堆栈空间。第4章基本程序设计第五十一页,共五十八页,编辑于2023年,星期日5.用DEBUG调试程序对可执行文件进行分析调试虽然形成了SX1A.EXE可执行文件,但程序是否按题目要求完成各项功能还不能肯定,程序中可能还隐藏着某些错误,此时就应该用DEBUG调试程序进行跟踪调试了。输入如下命令: C:\MASM\DEBUGSX1A.EXE -出现DEBUG命令提示符后,就可以用DEBUG的各种命令进行跟踪调试了。其中使用最多的是步跟踪命令P及命令D等。如发现程序有隐含错误,则在EDIT中修正错误,重新汇编连接形成可执行文件,再用DEBUG进行调试,直至正确无误。最后,在DOS命令提示符下运行程序,结果如下:C第4章基本程序设计返回本章首页第五十二页,共五十八页,编辑于2023年,星期日实训二循环程序设计实训内容:在以DAT为首地址的字数组中共有10个元素,都是无符号数。编程按从小到大的顺序重新排列,结果存回原地址。分析:要将10个数按降序排列,必须首先在这10个数中找到最小数,将其放在第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 洮河流域生态韧性时空演变及多情景预测
- PV-GPG理论视域下重大公共政策绩效审计
- 课题申报书:新时代高校安全教育标准化研究
- 大型拖拉机企业数字化转型与智慧升级战略研究报告
- 智慧农林牧渔业设备企业数字化转型与智慧升级战略研究报告
- 基于3D打印的生物陶瓷scaffold设计与优化-全面剖析
- 输卵管妊娠病理机制-全面剖析
- 智能多云资源调度算法-全面剖析
- 物流行业碳足迹计算方法-全面剖析
- 电子制造中的节能环保-全面剖析
- 山水林田湖草生态环境调查技术规范DB41-T 1992-2020
- 大众旅游服务质量控制手册
- GB/T 44421-2024矫形器配置服务规范
- 大型活动策划与管理第八章 大型活动风险管理
- Q∕GDW 12165-2021 高海拔地区运维检修装备配置规范
- JGJ107-2016钢筋机械连接技术规程
- 妇科医生进修汇报课件
- 动态分析与设计实验报告总结
- 2024年江苏省泰州市海陵区中考一模数学试卷
- 从汽车检测看低空飞行器检测发展趋势
- DB32T 4740-2024 耕地和林地损害程度鉴定规范
评论
0/150
提交评论