汇编语言第六章-计算机本-1~4

上传人:mg****85 文档编号:49674090 上传时间:2018-08-01 格式:PPT 页数:99 大小:1.39MB
返回 下载 相关 举报
汇编语言第六章-计算机本-1~4_第1页
第1页 / 共99页
汇编语言第六章-计算机本-1~4_第2页
第2页 / 共99页
汇编语言第六章-计算机本-1~4_第3页
第3页 / 共99页
汇编语言第六章-计算机本-1~4_第4页
第4页 / 共99页
汇编语言第六章-计算机本-1~4_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《汇编语言第六章-计算机本-1~4》由会员分享,可在线阅读,更多相关《汇编语言第六章-计算机本-1~4(99页珍藏版)》请在金锄头文库上搜索。

1、x dw 110,120,130,140,150,160,170,180,190,200 y dw ? MOV AX, XMOV BX, OFFSET XMOV CX, 9L1: INC BXINC BXCMP AX , BXJAE L2XCHG AX, BXL2: LOOP L1MOV Y,AX 此程序段完成什么功能复 习15.1.3 多重循环程序设计(172页) ) 【例5.7】在以BUF为首址的字存储区中存放N 个有符号数,现需将它们按大到小的顺序排列 在BUF存储区中,试编写其程序。 采用冒泡排序算法从第一个数开始依 次对相邻两个数进行比较,如次序对,则不 交换两数位置;如次序不对则使

2、这两个数交 换位置,则第一遍比较后最小值排到最后.2冒泡法的排序过程序号 数比 较较 遍 数12341 322 853 164 155 832 16 15 8 8516 15 8 32 8515 8 16 32 858 15 16 32 853程序如下:DATASEGMENTBUFDW 32,85,16,15,8DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA4START: MOVAX,DATA MOVDS,AX MOVCX,5 ;元素个数DEC CX ;比较遍数 LOOP1: MOV DX,CX ;保存外循环的循环次数 也可以做内循环计数(比较次数) MOV

3、 BX,0 LOOP2:MOV AX,BUFBX ;相邻两数比较 CMP AX,BUFBX+2 JGE L XCHG AX,BUFBX+2;大数放AX MOV BUFBX,AX ;并将大数送相应单元5L:ADDBX,2 ;进下一个单元,准备取下一个数Loop loop2MOVCX,DX ;恢复外循环次数LOOP LOOP1MOVAH,4CHINT21HCODEENDSEND START思考:外循环次数还可用什么指令处理?6上机: 编写打印如下图形程序(yhsj)0 1 0 2 1 0 3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0 7 6 5 4 3 2

4、 1 0 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 07第六章 子程序结构为了程序共享或模块化设计的需要,可以把一段公共语句序列设计成子程序(也叫过程)或宏指令的形式。8(一) 子程序结构子程序结构在汇编语言中用过程定义伪指 令定义子程序。过程定义伪指令格式:过程名PROC 属型过程名 ENDP9其中过程名就是子程序名,它也表 示子程序入口的符号地址。属型可以是NEAR型(缺省值)或 FAR型。NEAR型子程序只可以被段内调用, FAR型子程序可以被段间或段内调 用。10(1). 调用指令: (98页)格式: CALL PROC_NAME功能: 把断点地址(主程序

5、中下一条指令地 址)压入堆栈进行保护,无条件转到目标 地址执行子程序。(2). 返回指令: 格式 : RET N功能: 从栈顶弹出返回地址送IP,并返 回到主程序中去继续执行。dos演示call演示ret演示11w1调用程序和子程序在同 一个代码段的程序结构 CODE SEGMENT CALL SUB1 SUB1PROC near RET SUB1ENDPCODEENDS 12w2调用程序和子程序在不同段 的程序结构(SUB2被段间调用,必 须是FAR属性。CALL要显式说明 是FAR属性) CODE1SEGMENT CALLFAR PTR SUB2 CODE1ENDSCODE2SEGMENT

6、 SUB1PROCCALL SUB2 SUB1ENDP SUB2 PROCFAR RET SUB2ENDP CODE2ENDS13w寄存器的保存与恢复应在子程序开头保存它要用到的寄存器内容,返回前再恢复它们。通常用PUSH指令保存,用POP恢复。(二)、设计子程序时应注意的问题14SUB1 PROC ;* PUSH CX PUSH SI PUSHF POPF POPSI POPCX RET SUB1 ENDP15w 密切注意堆栈状态注意一切与堆栈有关的操作。例如:CALL调用类型和子程序定义类型的一致性。PUSH和POP指令的匹配。通过堆栈传递参数时子程序返回使用RET n指令等。确保堆栈平衡

7、,否则后果不可预料。16data segment string1 db “how dow you do!“,0dh,0ah,“$“ data endscode segment assumestart:mov ax,datamov ds,axlop1: mov dx,offset string1mov ah,4chint 21hdsp proc neardsp endpCode endsend start 填空17(三)子程序的参数传递1. 寄存器传递参数。最常用, 用寄存器作为入口参数或出口参数 。 适用传递少量参数.(howdoyou.asm)2. 通过地址表(存储器)传递参数地址。安排数据

8、区时,必须留出传递参数的位置 。 适用传递大量参数.3. 堆栈传递参数或参数地址。将参数入栈,子程序从堆栈中取数据.适用参数多,子程序嵌套及递归.18(四) 举例说明 子程序参数传递19w1通过寄存器传递这种传递方式使用方便,适用 于参数较少的情况。例6.9把BX中的16位二进制数 转换成十进制并显示在屏幕上 (225页)。分析:本例采用从高到低逐个 除以十进制位权的方法。20STASGSEGMENT DW 32 DUP(?) STASG ENDS CODE SEGMENT ASSUME CS:CODE,ss:stasg MAIN PROC FAR MOV BX,162EH CALL TERN

9、 MOV AX,4C00HINT 21H MAIN ENDP程序21TERN PROC;二十 并显示。MOV CX,10000 CALL DEC_DIV;转换万位数MOV CX,1000 CALL DEC_DIV;转换千位数MOV CX,100 CALL DEC_DIV;转换百位数MOV CX,10 CALL DEC_DIV;转换十位数MOV CX,1 CALL DEC_DIV;转换个位数 RET TERN ENDP22DEC_DIVPROC;CX中为十进制 的位权 MOV AX,BX MOV DX,0DIV CX;商为转换后的 一位十进制数 MOV BX,DX ;余数 MOV DL,AL ;

10、商ADD DL,30H;转换成 ASCII码MOV AH,2;显示 INT 21HRET DEC_DIVENDP CODE ENDSEND MAIN23mov bx, 0 newchar: mov ah, 1 int 21hsub al, 30h jl exitcmp al, 9jg exitcbwxchg ax, bxmov cx, 10mul cxxchg ax, bxadd bx, axjmp newchar复习:此程序段 完成的功能是什 么?24BX1234把BX中数以十六进制数形式显示(如007DH)0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 10 0 0 0 0 1

11、 1 1 1 1 0 1 0 0 0 025mov ch, 4 rotate: mov cl, 4rol bx, clmov al, bland al, 0fh; 09 ASCII 30H39Hcmp al, 3ah ;是否大于9jl printit; AF ASCII 41H46H printit:add al, 30hadd al, 7hmov dl, al mov ah, 2 int 21h dec ch jnz rotate把BX中数以十六进 制数形式显示,程 序段填空26例6.3 把从键盘接收的十进制数以十六 进行形式输出到屏幕上.(199页)开始调用DECIBIN调用CRLF调用B

12、INIHEX调用CRLF结束从键盘取得十进制数, 保存在BX中用十六进制形式 显示BX中的数27CODE SEGMENTASSUME CS:CODESTART: CALL DECIBINCALL CRLFCALL BINIHEXCALL CRLFJMP STARTMOV AH, 4CHINT 21H 28DECIBIN PROC NEARmov bx, 0 newchar: mov ah, 1 ;键盘输入int 21hsub al, 30h jl exit ; 9退出cbwxchg ax, bxmov cx, 10mul cxxchg ax, bxadd bx, axjmp newchar e

13、xit: RET DECIBIN ENDP1 2 531 32 35( ( 010)+1 )10+2 )10+529BX1234把BX中数以十六进制数形式显示(如007DH)0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 10 0 0 0 0 1 1 1 1 1 0 1 0 0 0 030BINIHEX PROC NEAR mov ch, 4 rotate: mov cl, 4rol bx, clmov al, bland al, 0fh; 09 ASCII 30H39Hcmp al, 3ah ;是否大于9jl printit; AF ASCII 41H46H printit:RE

14、T BINIHEX ENDPadd al, 30hadd al, 7hmov dl, al mov ah, 2 int 21h dec ch jnz rotate31CRLF PROC NEAR MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H RET CRLF ENDP CODE ENDSEND START32x dw 110,120,130,140,150,160,170,180,190,20 0 y dw ? MOV AX, XMOV BX, OFFSET XMOV CX, 9L1: INC BXINC BXCMP AX , BXJAE L2XCHG AX, BXL2: LOOP L1MOV Y,AX 此程序段完成什么功能?思考思考33TEST VAR ,55H JZ ZERO ZERO: 上述程序段中,当VAR的内容为何值 时,执行JZ ZERO条件转移指令后 ,可满足条件转到ZERO处( )?。 A) (VAR)=0FFH B) (VAR)=55H wVAR中第0,2,4,6位为0 wVAR中第1,3,5,7位为0 34w2若调用程序和子程序在同模块中,子程序可以直接访问模块中的变量例2实现数组求和功能。要求

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号