版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章基本控制结构2023/1/1280x86汇编语言程序设计5.1顺序结构
5.1.1简单程序设计
DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAH,1INT21H;输入字母
CMPAL,'a'JBEXIT;小于a退出
CMPAL,'z'JAEXIT;大于z退出
SUBAL,20H;大于a小于z,则转换成大写字母(减20h后转换为大写)MOVDL,ALMOVAH,02H;AH=2,显示字符
INT21HJMPSTARTEXIT:MOVAH,4CH;前面没有入栈操作,所以要调用编号为4C的功能返回DOSINT21HCODESENDSENDSTART2023/1/1280x86汇编语言程序设计5.1.2字符与字符串的输入/输出方法
DOS系统调用INT21H提供了字符及字符串的I/O功能,例如:
01H:从键盘读入一个字符
02H:显示一个字符
09H:显示一个字符串
0AH:从键盘读入一个字符串
2023/1/1280x86汇编语言程序设计5.1.2字符与字符串的输入/输出方法1.从键盘读入一个字符功能号:01H
出口参数:AL=输入字符的ASCII码功能:等待从键盘读入一个字符,将其ASCII码送入AL,同时将该字符显示在屏幕上。调用方法:
mov ah,1 int 21h
说明:输入一个字符后,不需要回车。若只键入回车,则AL=0DH。
2023/1/1280x86汇编语言程序设计5.1.2字符与字符串的输入/输出方法2.显示一个字符功能号:02H
入口参数:DL=要显示字符的ASCII码功能:在当前光标位置显示DL中的字符,光标右移。调用方法示例:
mov dl,'A' ;显示字符'A' mov ah,2 int 21h
说明:显示字符0DH和0AH将产生回车和换行的作用。
2023/1/1280x86汇编语言程序设计5.1.2字符与字符串的输入/输出方法
3.显示一个字符串功能号:09H
入口参数:DS:DX=欲显示字符串在内存的首地址,且字符串必须以'$'(24H)作为结束符。功能:在当前光标位置,显示由DS:DX所指的、以'$'结尾的字符串,且光标右移。其中,'$'不算在显示的字符串之内。调用方法示例:
String db 'Hello!','$';显示字符串'Hello!' mov ax,segString mov ds,ax mov dx,offsetString mov ah,9 int 21h
2023/1/1280x86汇编语言程序设计5.1.2字符与字符串的输入/输出方法
4.从键盘读入一个字符串功能号:0AH
入口参数:DS:DX=输入缓冲区首地址输入缓冲区格式:第0字节事先设置为缓冲区最多能容纳的字符个数(包括回车);第1字节将存放实际字符个数(不包括回车),由系统自动设置;从第2字节开始存放实际输入的字符串,最后为回车符。功能:从键盘读入一个字符串,存入DS:DX所指的缓冲区。调用方法示例:
buf db 10,?,10dup(?) ;定义输入缓冲区
mov ax,segbuf mov ds,ax lea dx,buf mov ah,0ah int 21h 2023/1/1280x86汇编语言程序设计5.1.2字符与字符串的输入/输出方法5.字符与字符串的输入/输出举例
DOS系统调用只提供了字符与字符串的输入/输出方法。如果要输入/输出其它类型的数据,如常用的整数,则必须由应用程序来实现与字符之间的转换。例如,欲输出整数126,只能以字符(串)的方式输出'1'、'2'、'6'。对于程序员来说,在需要用户输入时给出输入提示,对输入数据进行有效性检查,在输出结果时说明其表示的含义,是一种好的设计习惯。2023/1/1280x86汇编语言程序设计2023/1/1280x86汇编语言程序设计2023/1/1280x86汇编语言程序设计2023/1/1280x86汇编语言程序设计第一章基础知识第五章汇编语言程序结构
例:从键盘输入字符并将输入的字符显示出来,如果输入是英文字符小写字母,将小写字母转换成为大写字母。datasegmentmessage db 'Thisisasampleprogramofkeyboardanddisply'db 0dh,0ah,'Pleasestrikethekey!',0dh,0ah,'$'data ends;定义数据段,数据段给出提示内容。在数据段中0dh和0ah分别表示回车和;换行字符。字符‘$’表示字符串的结束标志。如果没有回车和换行会出现什;么显示结果。2023/1/1280x86汇编语言程序设计第一章基础知识第五章汇编语言程序结构stack segmentstackdb 50dup(?)stack ends;定义堆栈段。其中参数stack表示程序在运行过程中,该段为系统堆栈段中;的一部分。如果不加这个,将单独对本程序建立堆栈。code segmentassume cs:code,ds:data,ss:stack;明确段寄存器与段定义之间的关系start: mov ax,datamov ds,ax movax,stack;可以省,为什么?
movss,ax;可以省,为什么? ;初始化段寄存器2023/1/1280x86汇编语言程序设计第一章基础知识第五章汇编语言程序结构mov dx,offsetmessagemov ah,9int 21h;显示字符串。调用21H中断(也是DOS功能调用)的9号功能,该功能是;显示字符串,其中DS:DX为字符串地址,‘$’为字符串结束标志。again: mov ah,1int 21h;调用21H中断的1号功能,将键盘输入的字符ASC码存在al寄存器cmp al,1bh;和ESC键输入字符对比je exit;如果是按下ESC键,就跳转结束cmp al,61h;和’a’字符对比jc nd;产生借位,就是小于‘a’字符,跳转到nd直接输入结果cmp al,7ah;和’z’字符对比ja nd;没有借位同时不为零,大于‘z’字符,跳转到nd直接输入结果2023/1/1280x86汇编语言程序设计第一章基础知识第五章汇编语言程序结构and al,11011111b;如果输入字符在‘a’与‘z’之间,通过与运算,将小写转;换为大写。Subal,’a’-’A’也一样nd: mov dl,al;将字符传入到dl寄存器中mov ah,2int 21h;调用21中断的功能2,将dl寄存器的字符输出jmp again;循环执行,直到按下ESC键退出exit: mov ah,4chint 21h;调用21中断的4ch功能,返回doscode ends;代码段结束end start;结束汇编,程序结束
如果将主程序建立为过程,由DOS调用该过程。进入程序后,首先把DS的内容和0作为段地址和偏移地址入栈,以便在程序结束时用RET指令返回DOS,这是一种较好的工作方式。如果在主程序开始时没有用上面三条指令在堆栈中建立返回信息,则在程序结束时效不能直接用RET返回指令,而应该使用编号为4c的功能调用返回DOD。程序改为如下。2023/1/1280x86汇编语言程序设计5.4串操作
5.4.1串操作指令及其用途1.串操作指令(1)MOVS(MoveString):串传送
语法格式:
MOVSB MOVSW MOVSD
功能描述:
ES:[DI]=DS:[SI]; if(DF=0)then SI=SI+size;DI=DI+size; else SI=SI–size;DI=DI–size; endif
其中,size=1(B)、2(W)或4(D)。也就是说,MOVS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)复制到ES:DI所指的内存单元。然后,SI和DI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:无。2023/1/1280x86汇编语言程序设计5.4.1串操作指令及其用途(2)LODS(LoadString):串装入语法格式:
LODSB LODSW LODSD
功能描述:
AL/AX/EAX=DS:[SI]; if(DF=0)then SI=SI+size; else SI=SI–size; endif
其中,size=1(B)、2(W)或4(D)。也就是说,LODS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)复制到AL/AX/EAX。然后,SI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:无。
2023/1/1280x86汇编语言程序设计5.4.1串操作指令及其用途(3)STOS(StoreString):串存储语法格式:
STOSB STOSW STOSD
功能描述:
ES:[DI]=AL/AX/EAX; if(DF=0)then DI=DI+size; elseDI=DI–size; endif
其中,size=1(B)、2(W)或4(D)。也就是说,STOS(B/W/D)将AL/AX/EAX的值复制到ES:DI所指的内存单元。然后,DI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:无。
2023/1/1280x86汇编语言程序设计5.4.1串操作指令及其用途(4)CMPS(CompareStrings):串比较
语法格式:
CMPSB CMPSW CMPSD
功能描述:
DS:[SI]–ES:[DI]; if(DF=0)then SI=SI+size;DI=DI+size; else SI=SI–size;DI=DI–size; endif
其中,size=1(B)、2(W)或4(D)。也就是说,CMPS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)与ES:DI所指目的串的1个元素(字节/字/双字)进行比较,根据比较结果设置标志位。然后,SI和DI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:同CMP。
2023/1/1280x86汇编语言程序设计5.4.1串操作指令及其用途(5)SCAS(ScanString):串扫描语法格式:
SCASB SCASW SCASD
功能描述:
AL/AX/EAX–ES:[DI];
if(DF=0)then DI=DI+size; else DI=DI–size; endif
其中,size=1(B)、2(W)或4(D)。也就是说,SCAS(B/W/D)将AL/AX/EAX与ES:DI所指目的串的1个字节/字/双字进行比较,根据比较结果设置标志位。然后,DI增加或减少1/2/4。若DF=0,则增加,否则减少。
2023/1/1280x86汇编语言程序设计5.4.1串操作指令及其用途(6)重复前缀
REP ;当CX<>0时,重复执行后面的串指令
;每执行1次,CX=CX–1 ;只能用在MOVS、LODS或STOS(B/W/D)之前
REPZ/REPE ;当CX<>0且ZF=1时,重复执行后面的串指令
;每执行1次,CX=CX–1 ;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电线电缆挤塑工岗位实操效果考核试卷含答案
- 优衣库市场营销策划方案
- 茶树栽培工岗前个人防护考核试卷含答案
- 水产养殖潜水工岗前专业实操考核试卷含答案
- 甲基叔丁基醚丁烯-1装置操作工技术水平能力考核试卷含答案
- 红歌嘹亮忆历史少年同心颂家国-我校开展“九一八”主题红歌合唱比赛
- 校长在师徒结对仪式上讲话携手共进书写辉煌
- 2026年生鲜电商配送体系创新报告
- 2026年金融科技革命趋势报告
- 2026年健康与美妆行业全球趋势与洞察
- 2026年肌肉骨骼康复试题及答案
- 极客邦:2026年中国企业AI人才与组织发展报告-智能体时代的AI人才粮仓模型
- 污染场地地下水修复技术方案
- 新版2026秋新苏教版小学科学六年级上册全册知识点考点合集
- 2026年国际贸易术语(Incoterms2020)模拟试题及答案
- 支部换届两推一选会议记录范文
- 2026 年校园防诈骗安全教育课堂
- 2026年继续教育公需课(科目三)
- 杭州市拱墅区社区工作者考试题库及答案
- 万向传动轴说明书
- 电力安全生产事故总结
评论
0/150
提交评论