




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章典型汇编程序设计举例,算术运算 在偏移首地址为ARRAY的内存储区有100个字型数据,要求将数组的每个元素加1。 DATA SEGMENT LOOP AA1 ARRAY DW 100 DUP(?) MOV AX,4C00H DATA ENDS CODE ENDS CODE SEGMENT END START ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX LEA BX,ARRAY MOV CX,LENGTH ARRAY AA1: INC WORD PTRBX,1 ADD BX,2,第4章典型汇编程序设计举例,有两个无符号字节型数组,设数组元素个数相等,编程将数组中的对应元素相加,结果存入另一内存区。 DATA SEGMENT M1 DB 20 DUP(?) M2 DB 20 DUP(?) M3 DW 20 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,M1 LEA DI,M2 LEA BX,M3,MOV CX,20 AA1: MOV AL,SI ADD AL,DI MOV BX,AL ADC BYTE PTRBX+1,0 INC SI INC DI ADD BX,2 LOOP AA1 MOV AX,4C00H INT 21H CODE ENDS END START,第4章典型汇编程序设计举例,逻辑处理器 将AL中高、低4位交换 将AX内容按相反的顺序存入DX CODE SEGMENT CODE SEGMENT ASSUME CS:CODE ASSUME CS:CODE START:MOV AL,0ABH START:MOV AX,1234H MOV CL,4 MOV CX,16 ROL AL,CL AA1: SHL AX,1 MOV AX,4C00H RCR BX,1 INT 21H LOOP AA1 CODE ENDS MOV AX,4C00H END START INT 21H CODE ENDS END START,第4章典型汇编程序设计举例,代码转换 将以$结束的字符串中的小写字母改为大写字母 DATA SEGMENT STR DB heLLo,eveRyboDY !,$ DATA ENDS CODE SEGMENT ASSIME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,STR A1: MOV AL,BX CMP AL,$ JE DONE CMP AL,a,JB NEXT CMP AL,z JA NEXT SUB AL,20H MOV BX,AL NEXT: INC BX JMP A1 DONE: MOV AX,4C00H INT 21H CODE ENDS END START,第4章典型汇编程序设计举例,十六进制数到十进制数的转换 SST SEGMENT PARA STACK STACK TOP DW DUP(?) SSL ENDS CODE SEGMENT ASSUME CS:CODE,SS:SST START:MOV AX,SST MOV SS,AX MOV AX,4B6CH MOV CX,0 ;统计除法次数 MOV BX,10 A1: MOV DX,0 ;将被除数扩展为32位 DIV BX PUSH DX ;将转换好的数存入堆栈,INC CX OR AX,AX ;转换直到商为0 JNZ A1 MOV AX,4C99H INT 21H CODE ENDS END START,第4章典型汇编程序设计举例,表格处理 编写程序实现09的数字转换成所要求的密码 0 1 2 3 4 5 6 7 8 9 2 7 1 6 9 0 8 3 4 5 DATA SEGMENT MOV DI,OFFSET VAL2 TABLE DB 2,7,1,6,9,0,8,3,4,5 MOV CX,5 VAL1 DB 8,4,1,7,5 LEA BX,TABLE VAL2 DB 5 DUP(?) A1: MOV AL,SI DATA ENDS XLAT CODE SEGMENT MOV DI,AL ASSUME CS:CODE,DS:DATA INC SI START:MOV AX,DATA INC DI INT 21H MOV DS,AX LOOP A1 CODE ENDS MOV SI,OFFSET VAL1 MOV AX,4C00H END START,第4章典型汇编程序设计举例,串指令题 将偏移地址为STG1、长度为COUNT的数据块,传送到偏移地址为STG2的内存区中。 DATA SEGMENT STG1 DW 25 DUP(?) STG2 DW 25 DUP(?) COUNT EQU 25 DATA ENDS STACK1 SEGMENT PARA STACK STACK DB 100 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA,MOV DS,AX MOV ES,AX MOV CX,COUNT LEA SI,STG1 LEA DI,STG2 CLD REP MOVSW MOV AX,4COOH INT 21H CODE SEGMENT END START,第4章典型汇编程序设计举例,将BLOCK内存区的带符号字节型数据按照正数、负数分开,并分别存入BUFF1和BUFF2中 DATA SEGMENT BLOCK DB 60 DUP(?) BUFF1 DB 60 DUP(?) BUFF2 DB 60 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK LEA DI,BUFF1,LEA BX,BUFF2 MOV CX,60 CLD LOP: LODSB TEST AL,80H JNZ FU STOBS JMP AGAIN FU: XCHG BX,DI STOSB XCHG BX,DI INT 21H AGAIN: LOOP LOP CODE ENDS MOV AX,4C00H END START,第4章典型汇编程序设计举例,按数据大小排序 实现从一串带符号字型数据中找出最大值 DATA SEGMENT BLOCK DW 762EH,6A8BH,-664AH,0B945H,-85DH COUNT EQU ($-BLOCK)/2 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,BLOCK MOV CX,COUNT MOV AX,SI DEC CX,AA1: ADD SI,2 CMP AX,SI JG AA2 MOV AX,SI AA2: LOOP AA1 MOV BX,AX MOV AX,4C00H INT 21H CODE ENDS END START,第4章典型汇编程序设计举例,数据排序 冒泡法将数据两两比较: 冒泡排序的过程:首先比较第一个和第二个数据,将其中较小的数据放到第一个位置,较大的放到第二个位置;然后比较第二个和第三个数据,仍将较小放到后一个位置。依此类推,直到比较第n-1和第n个数据。这样,就将待排序序列中的最大的一个放到了第n个数据,这个过程称为第一趟排序。 下面对前N-1个数据重复这个过程(不用考虑第n个数据,因为它已经是最大的了),又将次大的数据放到了第n-1个位置。一般地,第i趟冒泡排序是对第1个到第n-i+1个数据进行操作,选出原序列第i大的数据放到数组的第n-i+1位置。重复这个过程,直到i=n-1为止。 前一数较大,则不改变位置;否则两数交换,依次将全部数据排序一次-小循环(从小到大) 前一数较小,则不改变位置;否则两数交换,依次将全部数据排序一次-大循环(从大到小),对比原数据经过第一趟排序,实现了什么目的?,第一趟排序,一共进行了多少次比较?,4938,交换位置,原数据和序号,第一趟排序的步骤:,经过第一趟排序,把最大的数沉到最底了!,4965, 保持不变,6597, 保持不变,9776, 交换位置,9713, 交换位置,9727, 交换位置,9749, 交换位置,冒泡法大循环,经过第二趟排序,实现了什么目的?,经过第二趟排序,把第二大的数沉到倒数第二个位置了!,3849,保持不变,第一趟排序后的数据和序号,第二趟排序的步骤:,4965, 保持不变,6576, 保持不变,7613, 交换位置,7627, 交换位置,7649, 交换位置,7697, 保持不变,冒泡法大循环,观察原数据与第一、二趟排序后的数据,问:为了使这一组无序数组完全按照要求排成 从小到大我们还需不需要再继续排序呢?,问:那么我们预计最多一共要经过多少次排序呢?,冒泡法大循环,N个数 ,则要进行 N-1 趟比较。 在第一趟比较中要进行 N-1 次两两比较, 在第 j趟比较中要进行 N-j次两两比较。,DOS功能调用与子程序设计,单字符输入并回显-1号 入口: AH=01H 出口:AL=输入字符编码并屏幕显示字符 输出/显示单个字符-2号 入口: AH=02H,DL=字符编码 出口:显示字符 多字符输入-0AH 入口: AH=0AH, DS:DX指向输入缓冲区首址 出口: DS:DX指向输入字符串缓冲区首址,显示字符 注意: 缓冲区第1个字节存放预定字符个数,最多255个 缓冲区第2个字节保留,调用返回时存放实际输入字符个数 缓冲区第2个字节开始存放字符 保留一个字节的回车符,DOS功能调用与子程序设计,显示输出字符串-9号 入口: AH=09H,DS:DX指向输出字符缓冲区首址, 该字符串以“$”结尾。 出口:显示字符串 单字符输入输出-6号 1号和2号功能的组合 DL=0FFH,与1号功能相同,从键盘输入单个字符 DL=字符的ASCII码,与2号功能相同,从键盘输出单个字符 结束程序,返回操作系统 入口: AH=4CH 出口:屏幕显示操作系统提示符n 如果在DEBUG状态下运行则返回DEBUG,在DOS下运行,则返回DOS,DOS功能调用与子程序设计,编写一个子程序,实现一个2位十六进制数到ASCII码的转换。 子程序:CONHA实现将2位的十六进制数转换成ASCII码 输入参数:AL=待转换的数;输出参数:BX=转换好的ASCII码 使用寄存器:AL,AH,BX,CL CODE SEGMENT ASSUME CS:CODE CONHA PROC FAR MOV AH,AL ;保存待转换数 AND AL,0FH ;处理16进制数低位 CMP AL,0AH ;是否为16进制数? JB ASCI ADD AL,07 ;是,加7? ASCI: ADD,AL,30H MOV BL,AL MOV,CL,4,;原数右移,处理高位 SHR AH,CL CMP AH,0AH JB ASC2 ADD AH,07H ASC2: ADD AH,30H MOV BH,AH RET CONHA ENDP CODE ENDS,DOS功能调用与子程序设计,用子程序调用的方式,编写从键盘输入4位十六进制数的程序 子程序名:ZH检查键盘输入错误,将输入值转换成十六进制数 输入参数:AL,输出参数:AL;使用寄存器:BX,CX CODE SEGEMNT ASSUME CS:CODE START:MOV CX,4 MOV DX,CX MOV BX,0 RET1: MOV AH,1 INT 21H CALL ZH SHL BX,CL ADD BL,AL DEC DX JNZ RE1 MOV AX,4C00H,INT 21H ZH PROC CMP AL,9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南通市中石化2025秋招笔试模拟题含答案行测综合英语
- 天津市中储粮2025秋招面试典型题目及答案
- 国家能源武汉市2025秋招化学工程类面试追问及参考回答
- 国家能源铜陵市2025秋招机械工程类面试追问及参考回答
- 安阳市中石化2025秋招笔试提升练习题含答案
- 丽江市中石化2025秋招笔试模拟题含答案新材料与新能源岗
- 株洲市中石化2025秋招面试半结构化模拟题及答案电气仪控技术岗
- 许昌市中储粮2025秋招购销统计岗高频笔试题库含答案
- 大唐电力鸡西市2025秋招半结构化面试模拟30问及答案
- 武威市中石油2025秋招心理测评常考题型与答题技巧
- 自来水企业内部管理规范
- 2025新热处理工程师考试试卷及答案
- 肝功能不全治疗与护理
- 供应商现场审计管理办法
- 南平市河道蓝线管理办法
- 广州日间病床管理办法
- 工会兼职补助管理办法
- 办案审讯员培训课件
- 医院保密教育培训课件
- 公路工程技术人员岗位面试问题及答案
- 2025至2030中国自动分拣机器人行业市场发展分析与发展前景预测及投资咨询报告
评论
0/150
提交评论