版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
stack segmentstack ;定义堆栈段
dw512dup(?) ;堆栈段有512字(1024字节)空间stack ends ;堆栈段结束data segment ;定义数据段string db’Hello,Everybody!’,0dh,0ah,’$’data endscode segment’code’ ;定义代码段
assumecs:code,ds:data,ss:stackstart: movax,data ;建立DS段地址
movds,ax
movdx,offsetstring movah,9 int21h movax,4c00h int21h ;利用功能调用返回DOScode ends ;代码段结束
endstart ;汇编结束,同时指明程序起始点完整段定义格式数据段堆栈段(可略)分配段寄存器首指令位置返回DOS设置DS段寄存器内容源程序结束,第一条指令的地址这是编写程序的模版:极其重要。汇编语言的main{}在哪里?
例 dataseg ARR1DB00H,11H,22H,33HARR2DW3456H,1024,25×25,1000/3,10A0HdataendsARR100H11H22H33HARR256H34H00H04H71H02H4DH01HA0H10H0123456789ABCDEARR1的偏移地址是0ARR2的偏移地址是4MOVAX,ARR2;(AX)=?MOVAX,OFFSETARR2;(AX)=?MOVAL,ARR2+5;(AL)=?(X)MOVAX,ARR1+1;(AX)=?(X)变量在指令中的使用分析偏移地址这个·例子说明两点:1。变量的值与变量的地址的区别2。变量的类型----字节与字的区别编辑文本编辑器,如EDIT.COM源程序:文件名.asm汇编汇编程序,如MASM.EXE目标模块:文件名.obj连接连接程序,如LINK.EXE可执行文件:文件名.exe调试调试程序,如DEBUG.EXE应用程序错误错误错误错误注意:MASM及LINK生成的是后缀为EXE的可执行文件,与普通CPU的BIN或HEX文件是不同的微机原理与接口技术
第4章深入浅出学编程通过本章的学习,应当掌握以下内容:了解汇编语言的基本知识和特点。熟悉汇编语言的程序结构、段定义以及语句的格式。掌握汇编语言常用伪指令的使用方法。熟练掌握汇编语言程序设计的基本方法:顺序结构、分支结构、循环结构和子程序结构。*掌握程序设计中的宏指令和常用的系统功能的调用方法。是否掌握?教学目的综合硬指令和伪指令,从程序结构角度展开程序设计,:分支结构程序设计循环结构程序设计子程序结构程序设计教学重点1.掌握基本程序结构――顺序结构、循环结构、分支结构及其汇编语言程序设计2.熟悉常见程序设计问题:数据范围判断(0~9、A~Z、a~z)字母大小写转换;字符串传送、比较等操作求最大最小值、数据求和、统计字符个数数组排序,查找,插入,删除●
一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试
当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。汇编语言设计的一般步骤
一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试
根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。
汇编语言设计的一般步骤
一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来的图形。工具:VISIO,AUTOCAD汇编语言设计的一般步骤
一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试
经过上述各步骤后,解决问题的思路已经非常清楚,所以接下来就可以按流程图的顺序对每一个功能框选用合适的指令编写出汇编语言程序。工具:UltraEdit,BeyondCompare2汇编语言设计的一般步骤
一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试在应用程序的设计中,几乎没有一个程序只经过一次编写就完全成功的,所以必须经过上机调试。工具:MASM,TASM,Emu8086,ReallyASM,Debug汇编语言设计的一般步骤程序的灵魂--算法一个程序应包括两个方面的内容对数据的描述:数据结构(datastructure)对操作的描述:算法(algorithm)著名计算机科学家沃思提出一个公式:数据结构+算法=程序数据结构+算法+程序设计方法+合适语言工具完整的程序设计应该是:算法的概念
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次对同一个问题,可有不同的解题方法和步骤例:求简单地说:算法就是解决问题的思路问题是:汇编语言与高级语言的思路不太一样用流程图表示算法美国国家标准化协会ANSI(AmericanNationalStandardInstitute)规定了一些常用的流程图符号:起止框判断框处理框输入/输出框注释框流向线连接点希望大家重视流程图是表示算法的较好的工具。一个流程图包括以下几部分:(1)表示相应操作的框;(2)带箭头的流程线;(3)框内外必要的文字说明。传统流程图的流程可以是:
这种如同乱麻一样的算法称为BS型算法,意为一碗面条(ABowlofSpaghetti),乱无头绪。缺点:难以阅读、修改,使算法的可靠性和可维护性难以保证。解决办法:必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺序地进行下去。
(3)分支(选择)结构(4)子程序结构●程序结构(5)复合结构:多种程序结构的组合…
(1)顺序结构(2)循环结构Bohra和Jacopini提出了以下三种基本结构:
顺序结构、选择结构、循环结构用这三种基本结构作为表示一个良好算法的基本单元。
图中没有一条从入口到出口的路径通过A框。不正确的流程表示:流程内的死循环4.3顺序程序设计顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构一般纯粹的顺序结构的程序设计较少开始执行1结束执行2例4.1
.modelsmall
.stack .dataX dw5Y dw6Z dw7W dw?
.code .startup
movax,X addax,Y addax,Z movW,ax
.exit0 end计算:Z=X+Y,结果放在W64位数据左移8位例4.2-1/2
.dataqvar dq1234567887654321h
.code moval,byteptrqvar[6] movbyteptrqvar[7],al moval,byteptrqvar[5] movbyteptrqvar[6],al moval,byteptrqvar[4] movbyteptrqvar[5],al moval,byteptrqvar[3] movbyteptrqvar[4],al图示3456788765432100例4.2-2/2 moval,byteptrqvar[2] movbyteptrqvar[3],al moval,byteptrqvar[1] movbyteptrqvar[2],al moval,byteptrqvar[0] movbyteptrqvar[1],al movbyteptrqvar[0],012
34
56
78
87
65
43
21h34
56
78
87
65
43
21
00h移位后图示第4章64位数据左移8位123456788765432100qvar[0]qvar[1]qvar[2]qvar[3]qvar[4]qvar[5]qvar[6]qvar[7]例题代码转换-1/2;查表法,实现一位16进制数转换为ASCII码显示
.modelsmall .stack .dataASCII db30h,31h,32h,33h,34h,35h db36h,37h,38h,39h ;0~9的ASCII码
db41h,42h,43h,44h,45h,46h ;A~F的ASCII码hex db0bh ;任意设定了一个待转换的一位16进制数例题代码转换-2/2 .code .startup
movbx,offsetASCII ;BX指向ASCII码表
moval,hex ;AL取得一位16进制数,正是ASCII码表中位移
andal,0fh ;只有低4位是有效的,高4位清0
xlat
;换码:AL←DS:[BX+AL] movdl,al ;入口参数:DL←AL movah,2 ;02号DOS功能调用显示出来
int21h ;显示一个ASCII码字符
.exit0 end开始设置数据段和堆栈段地址设置堆栈指针取数据截取高四位右移四位
例:设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制数,并存入HEX和HEX+1单元的低4位,HEX存放高位十六进制数,HEX+1单元存放低位十六进制数解: 分析命题确定算法画流程图拆字程序取原数据结束保存高位十六进制数截取低四位保存低位十六进制数保存结果
MOV SS,AX MOV SP,LENGTHSTK MOV AL,DATA MOV AH,AL AND AL,0F0H MOV CL,04 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AX,4C00H INT 21HCSEGENDS END BEG
例:设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制数,并存入HEX和HEX+1单元的低4位,HEX存放高位十六进制数,HEX+1单元存放低位十六进制数解: 分析命题确定算法画流程图编写程序上机调试拆字程序
SSEG SEGMENTSTACKSTK DB 20DUP(0)SSEG ENDSDSEG SEGMENTDATA DB 0B5HHEX DB 0,0DSEG ENDSCSEG SEGMENT ASSUMECS:CSEG,DS:DSEG ASSUMESS:SSEGBEG:MOV AX,DSEG MOV DS,AX MOV AX,SSEG4.4分支程序设计分支程序根据条件是真或假决定执行与否判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制单分支:求绝对值等双分支:显示BX最高位等多分支:例4.4等29/18汇编语言程序的基本结构分支结构:利用条件转移指令,使程序执行到某一指令后,根据条件是否满足,来改变程序执行的顺序。一般先用比较指令或数据操作及位检测指令来改变标志寄存器各个标志位,然后用条件转移指令进行分支。绘制程序流程图步骤必不可少!!!绘制程序流程图,一般先按上下流程线写,再完成分支部分。绘制程序流程图的判断环节时,要特别注意把握逻辑关系和标志位的意义。分支如何产生单分支程序设计条件成立跳转,否则顺序执行分支语句体;注意选择正确的条件转移指令和转移目标地址例题求绝对值;计算AX的绝对值
cmpax,0
jnsno_neg ;分支条件:AX≥0
negax ;条件不满足,求补no_neg: movresult,ax ;条件满足;计算AX的绝对值
cmpax,0
jsyesneg ;分支条件:AX<0 jmpnonneg;分支条件:AX>=0yesneg: negax ;条件不满足,求补nonneg: movresult,ax ;条件满足GoodBad例题无符号数除以2(自学);AX中存放的无符号数;如果是偶数除以2,如果是奇数,则加1后除以2 testax,01h ;测试AX最低位
jzeven ;最低位为0:AX为偶数
addax,1 ;最低位为1:AX为奇数,需要加1even: rcrax,1 ;AX←AX÷2 ;如果采用SHR/SAR指令,则不能处理AX=FFFFH的特殊情况分析命题确定算法画流程图开始取十六进制数X+30H0<=X<=9YN0A<=X<=0FHX+37H结束YN分支程序设计例:写一个实现把一位十六进制数转化为对应ASCII码的程序。
流程图的例子分析命题确定算法画流程图编写程序上机调试
JMP LAB2LAB1:ADDAL,37HLAB2:MOVASCII,AL MOVAH,4CH INT21HCODEENDSENDSTART
DATA SEGMENTXXDB4ASCIIDB?DATAENDS
CODESEGMENT ASSUME CS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVAL,0FH CMPAL,9 JALAB1 ADDAL,30H分支程序设计例:写一个实现把一位十六进制数转化为对应ASCII码的程序。
双分支程序设计条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体。注意第1个分支体后一定要有一个JMP指令跳到第2个分支体后例题显示BX最高位-解法1 shlbx,1 ;BX最高位移入CF
jcone ;CF=1,即最高位为1,转移
movdl,’0’
;CF=0,即最高位为0,DL←’0’
jmptwo
;一定要跳过另一个分支体one: movdl,’1’
;DL←’1’two: movah,2 int21h ;显示另一种解法例题显示BX最高位-解法2
shlbx,1 ;BX最高位移入CF
jncone ;CF=0,即最高位为0,转移
movdl,’1’;CF=1,即最高位为1,DL←’1’
jmptwo
;一定要跳过另一个分支体one: movdl,’0’
;DL←’0’two: movah,2 int21h ;显示另一种解法例题显示BX最高位-解法3 movdl,’0’
;DL←’0’ shlbx,1 ;BX最高位移入CF jnctwo ;CF=0,最高位为0,转移
movdl,’1’
;CF=1,最高位为1,DL←’1’two: movah,2 int21h ;显示
解法三说明:双分支程序可以改为单分支程序多分支程序设计多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合,例如:
orah,ah ;等效于cmpah,0jzfunction0 ;ah=0,转向function0decah ;等效于cmpah,1jzfunction1 ;ah=1,转向function1decah ;等效于cmpah,2jzfunction2 ;ah=2,转向function2图示想想C语言的CASE多分支结构AH=0function0YNAH=1function1YNAH=2function2YN第4章【例】编程实现下列函数的功能,其中X、Y为无符号字节数。(多分支)1:画出详细流程2:编写完整程序流程图(AL)=X(BL)=Y开始(AL)=(BL)?Z=0YZ=1Y(AL)>(BL)?NZ=-1N结束MOV AX,DAT
MOV DS,AXCMP AL,BLJE
C1
JA
C2EXT: MOVZ,AL
MOV AL,X MOV BL,YC1:MOV AL,0
JMP
EXTC2:MOV AL,1
JMP
EXTMOVAL,-1地址表形成多分支(太技巧,不用看)需要在数据段事先安排一个按顺序排列的转移地址表输入的数字作为偏移量。因为有2个字节16位偏移地址,所以偏移量需要乘2关键是要理解间接寻址方式JMP指令地址表分支1地址分支2地址...table dwdisp1,disp2,disp3,disp4,...此例有点难不用看,但这个方法(技巧)是汇编经常用到的 .datamsg db'Inputnumber(1~8):',0dh,0ah,'$'msg1 db'Chapter1:...',0dh,0ah,'$'msg2 db'Chapter2:...',0dh,0ah,'$‘ ...msg8 db'Chapter8:...',0dh,0ah,'$'table dwdisp1,disp2,disp3,disp4 dwdisp5,disp6,disp7,disp8 ;取得各个标号的偏移地址例4.4数据段-1/3此处等同于offsetdisp1start1: movdx,offsetmsg ;提示输入数字
movah,9 int21h movah,1 ;等待按键,ASCIICODE
int21h
cmpal,'1' ;数字<1?
jbstart1 cmpal,'8' ;数字>8?
jastart1 andax,000fh ;将ASCII码转换成数字例4.4代码段-2/3
decax shlax,1 ;等效于addax,ax
movbx,ax
jmptable[bx];(段内)间接转移:IP←[table+bx]start2: movah,9 int21h .exit0disp1: movdx,offsetmsg1 ;处理程序1
jmpstart2disp2: movdx,offsetmsg2 ;处理程序2
jmpstart2
…..例4.4代码段-3/3可以改为calltable[bx]对应修改为ret4.5循环程序设计循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体循环指令和转移指令可以实现循环控制循环指令LOOPE:例4.6转移指令:例4.7多重循环:例4.8等循环指令LOOP:例4.5循环结构
结束
初始化
循环的初始状态
循环体
循环的工作部分及修改部分
计数控制循环条件控制循环修改部分控制条件YN●循环程序结构形式DO-WHILE结构
DO-UNTIL结构控制条件初始化循环体YN控制条件初始化循环体YN初始化:设置循环的初始状态循环体:循环的工作部分及修改部分控制条件:计数控制(LOOP)特征值控制(LOOPZ/LOOPNZ/ 条件跳转指令)
●循环程序结构说明例4.5:把BX中的二进制数以十六进制的形式显示在屏幕上
如:1011001011111010BB2FAH
BX1234分析:(1)程序结构的确定由题意应该把BX的内容从左到右每4位为一组在屏幕上显示出来,显然这可以用循环结构来完成,每次显示一个十六进制数位,因而循环次数是已知的,计数值为4。
(2)循环体的构成(算法确定)循环体应该包括:二进制到所显示字符的ASCII之间的转换,以及每个字符的显示。需要了解相关知识:◆字符和其ASCII码之间的关系?
“0”~“9”
30H~39H,“A”~”Z”41H~5AH◆如何显示一个字符?(a)将显示字符的ASCII码放入DL寄存器;(b)将AH的内容置为2(功能号);(c)执行INT21H(DOS功能调用)。(3)循环控制条件分析●因为循环次数已知,可以使用LOOP指令实现,但是必须注意:由于循环移位指令中使用CL寄存器作为移位次数寄存器,而LOOP指令的循环次数隐含在CX寄存器中,因此,必须注意这两者之间的冲突。●除了可以使用LOOP指令之外,还可以使用条件跳转指令来实现。LOOPAGAIN
DEC计数器
JNZAGAIN
……
movcx,4;初始化rotate:pushcx
movcl,4;把高四位移到低四位
rolbx,clmoval,bl ;找出BX的低四位
andal,0fhaddal,30h;’0’~’9’ASCII30H~39Hcmpal,3ahjlprintit ;al<3ahaddal,7h;’A’~’F’ASCII41H~46H
printit:movdl,almovah,2int21h
popcx
looprotate
……方法1(LOOP)注意这个地方这是干什么?显示AL的内容
……
movch,4;初始化rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30h;’0’~’9’ASCII30H~39Hcmpal,3ahjlprintitaddal,7h;’A’~’F’ASCII41H~46Hprintit:movdl,almovah,2int21h
decchjnzrotate
……方法2(条件跳转指令) .modelsmall .stack .datasum dw? .code .startup xorax,ax ;被加数AX清0 movcx,100again: addax,cx;从100,99,...,2,1倒序累加
loopagain movsum,ax ;将累加和送入指定单元
.exit0 end例4.6求和:1+2+…+100
计数控制循环循环次数固定
movbx,offsetstringagain: moval,[bx] ;取一个字符
oral,al ;是否为结尾符0
jzdone ;是,退出循环
cmpal,'A' ;是否为大写A~Z
jbnext cmpal,'Z'
janext oral,20h
;是,转换为小写字母(使D5=1)
mov[bx],al ;仍保存在原位置next: incbx
jmpagain ;继续循环done: .exit0例4.7把一串字符中的大写改为小写
条件控制循环利用标志退出大小写字母仅D5位不同冒泡法“冒泡法”是一种排序算法,不是最优的算法,但它易于理解和实现冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序这需要一个双重循环程序结构图示冒泡法的排序过程序号数比较遍数123413228531641558321615885161583285158163285815163285第4章
mov
cx,count ;CX←数组元素个数
deccx ;元素个数减1为外循环次数outlp: mov
dx,cx ;DX←内循环次数
movbx,offsetarrayinlp:
moval,[bx] ;取前一个元素
cmpal,[bx+1] ;与后一个元素比较
jnanext ;前一个不大于后一个元素,则不进行交换
xchgal,[bx+1] ;否则,进行交换
mov[bx],alnext: incbx ;下一对元素
decdx
jnzinlp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手外伤护理中的沟通技巧
- 个案护理中的伤口护理与造口护理
- 2025年办公吊顶改造合同协议
- 城市微气候调控研究
- 2025年人脸识别智能门锁行业媒体宣传方案
- 城镇化与生态环境耦合机制
- 一轮复习:第2课 诸侯纷争与变法运动 课件
- 基于模型的重建
- 药学专业知识试题及答案
- 2026 年中职酒店管理(酒店礼仪)试题及答案
- 2025云南省人民检察院招聘22人笔试考试备考题库及答案解析
- 银行行业公司银行客户经理岗位招聘考试试卷及答案
- 2026年安全生产管理培训课件与事故预防与应急处理方案
- 2026天津市静海区北师大实验学校合同制教师招聘81人(仅限应届毕业生)考试笔试备考题库及答案解析
- 2025陕西陕煤澄合矿业有限公司招聘570人参考笔试题库及答案解析
- 2025年仓储服务外包合同协议
- 2025辽宁沈阳金融商贸经济技术开发区管理委员会运营公司招聘60人考试历年真题汇编带答案解析
- 2025年刑法学考试试题及答案
- 广东省汕头市金平区2024-2025学年七年级上学期期末地理试题
- 前列腺癌根治术护理查房
- 数理统计(第三版)课后习题答案
评论
0/150
提交评论