北京理工大学汇编语言实验五 子程序设计实验

合集下载

北京理工大学总汇编实验报告材料实验四

北京理工大学总汇编实验报告材料实验四

本科实验报告实验名称:分支和循环实验一、实验目的1)掌握比较指令;2)理解条件转移和无条件转移指令的区别;3)掌握单分支、双分支、多分支的程序设计方法;4)掌握循环程序设计方法。

二、实验内容内容一程序代码:DATAS SEGMENTBUF DB 12H,98H,45H,64H,78H,36H,55H,44H,0ABH,0CFH COUNT EQU $-BUFNUM1 DB 0NUM2 DB 0BUF1 DB 00,00BUF2 DB 00,00DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,COUNTMOV SI,0MOV DI,0L:MOV AL,BUF[SI]CMP AL,0JG L1INC NUM2CBWADC WORD PTR BUF2[DI],AXJMP L2L1:INC NUM1CBWADC WORD PTR BUF1[DI],AX L2:INC SILOOP LMOV AH,4CHINT 21HCODES ENDSEND START程序运行结果:内容二实验代码:DATAS SEGMENTBUF DB 12H,98H,45H,64H,78H,36H,55H,44H,0ABH,0CFH COUNT EQU $-BUFMAX DB 0MIN DB 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,COUNTMOV SI,0MOV AL,BUF[SI]MOV MAX,ALL:INC SIMOV AL,BUF[SI]CMP AL,MAXJL L1MOV MAX,ALL1:DEC CXJNZ LMOV CX,COUNTMOV SI,0MOV AL,BUF[SI]MOV MIN,ALM:INC SIMOV AL,BUF[SI]CMP AL,MINJA M1MOV MIN,ALM1:DEC CXJNZ MMOV AH,4CHINT 21HCODES ENDSEND START程序运行结果:所以可得有符号数的最大值为78H,无符号数的最小值12H。

北京理工大学汇编语言实验报告一

北京理工大学汇编语言实验报告一

汇编语言实验报告实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)班级:05211002姓名:张宁学号:1120102310实验日期:2012.9.7晚6:00~9:00汇编语言实验报告实验一 DOS 环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示。

四、实验内容与步骤1、汇编、链接并调试给出的简单程序,找出程序中的错误。

(一)录入并建立汇编语言源程序文件(ASM 文件)(二)用汇编程序MASM 将ASM 文件汇编成目标程序文件(OBJ 文件)(三)用连接程序LINK 生成可执行程序文件(EXE 文件)(四)程序的调试2、完成程序设计:分类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。

使用Debug 查看Positive、Negative 和Zero 三个变量的数据。

五、实验过程及结果:实验一:1.输入给出的程序2.运行输入的程序,发现了三处错误:根据错误提示,发现错误为ADDITION后未打冒号,CMP错打为COM。

修改原代码:改为:3.代码编译成功,生成OBJ文件,再生成EXE文件,可成功运行。

4.在原程序代码后添加两行代码,以验证ADDITION的逻辑正确性,改动如下:现实在DATA1中添加字节型sum ,再将ADDITION的运行结果,从AX送到sum中去。

5.调试发现ADDITION并没用正确运行。

检查语句逻辑性发现,应将JAE改成JB,才能实现累加并终结。

北京理工大学汇编实验五

北京理工大学汇编实验五

一、实验目的1、掌握子程序有关基本知识,学会子程序设计方法;2、掌握主程序与子程序之间的调用关系及调用方法;3、掌握汇编语言字符串处理方法;4、掌握字符串的输入输出程序设计方法;5、掌握数制转换程序实现方法。

二、实验软硬件环境1、硬件环境:惠普64 位一体化计算机及局域网;2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。

三、实验相关知识把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就性成子程序。

子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率。

1) 子程序的定义语句格式汇编语言子程序以proc 语句行开始,以endp 语句行结束。

如:过程名PROC near[或far]过程体..........................过程名ENDP在主程序中用CALL 过程名调用。

主程序和子程序之间传递参数通常通过栈来进行,当然也可以用某些缺省的寄存器或内存来传递。

但以通过栈来传递参数程序的通用性最强。

2) 子程序调用说明子程序从PROC 语句开始,以ENDP 语句结束,程序中至少应当包含一条RET 语句用以返回主程序。

在定义子程序时,应当注意其距离属性:当子程序和调用程序在同一代码段中时,用NEAR 属性;当子程序及其调用程序不在同一个代码段中时,应当定义为FAR 属性。

当由DOS 系统进入子程序时,子程序应当定义为FAR 属性。

为执行子程序后返回操作系统,在子程序的前几条指令中设置返回信息。

3) 子程序使用中的问题A、主程序调用子程序是通过CALL 指令来实现的。

子程序执行后,通过RET 指令,返回主程序调用指令CALL 的下一条指令,继续执行主程序。

一个子程序可以由主程序在不同时刻多次调用。

如果在子程序中又调用了其他的子程序,则称为子程序的嵌套。

特别是当子程序又能调用子程序本身时,这种调用称为递归。

B、调用子程序时寄存器及所用存储单元内容的保护。

第五次汇编语言实验报告子程序设计

第五次汇编语言实验报告子程序设计

汇编语言实验报告Assembly Language Programming Lab Reports班级:姓名:学号:实验日期:学院:专业:实验顺序:原创: ___ 实验名称:子程序设计实验分数:考评日期 : 指导教师:一.实验目的1、掌握过程调用伪指令 : PROC,ENDP,NEAR和 FAR。

2、掌握 CALL,RET,RET n 。

理解子程序调用时现场保护和恢复现场的意义。

3、掌握子程序传递参数的三种方式,寄存器,内存单元,堆栈。

4、培养在复杂的程序设计时,采用模块化结构划分功能,分解程序的意识。

5、对子函数的嵌套调用和递归调用有一定的理解。

二.实验环境操作系统:windows 8 编译程序:masm 5.0三.实验原理1. 子程序递归,堆栈传参2. 寄存器、存储器传参四.实验步骤及结果分析1.子程序递归调用(求阶乘) 用堆栈进行传递参数高级语言函数调用过程Fac(n) = fac(n-1)*n n>0Fac(n)= 1 n=0Int fac(int n){int f;If (n<=0)F==1;Else f=fac(n-1)*n;}在汇编语言中子程序没有形参和实参,直接更改的是给定寄存器或者内存单元或者栈中的数据,需要自己开辟类似形参的空间去保存相应的数据,在这里最好的办法就是用栈。

源代码:stack segment stackdb 100h dup(?)stack endsdata segmentresult dw ?data endscode segmentmain proc farassume cs:code,ds:datastart:mov ax,datamov ds,axmov ax,5push axcall factmov result,axmov ah,4chint 21hmain endpfact proc nearpush bpmov bp,spmov ax,[bp+4]cmp ax,0ja result1mov ax,1jmp result2result1:dec ax push ax call fact mov bx,[bp+4]mul bx result2:pop bpret 2 fact endp code ends end start 实验结果:2.实现两个输入的十进制数相减法,相乘,相除,三者任选一个。

北京理工大学汇编实验五实验报告概要

北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。

2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。

汇编实验报告--子程序设计实验

汇编实验报告--子程序设计实验

实验五子程序设计实验学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。

二、实验内容1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。

要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。

三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.第一个实验程序用子程序的近程调用实现。

由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。

实验过程中可以从堆栈的内容看到两个子程序的返回地址值。

由于是近调用,地址值只包括返回地址的段内偏移量。

在每个子程序的执行中,检查CS值是不变的。

2.预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。

五、主要实验步骤1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。

特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。

3.检查程序执行的结果是否正确。

六.实验结果:七.心得体会了解了把BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码源代码:.MODEL SMALL.336.STACK 200H.DA TAAS CV AL DB ‘12345’BINV AL DW ?.CODEMAIN PROCSTART:MOV AX,@DA TAMOV DS,AXLEA BX ASCV ALPUSH BXLEA BX,BINV ALPUSH BXCALL CONV ASCBINMOV AX,4C00HINT 21HMAIN ENDPCONV ASCBIN PROCPUSH BPMOV BP,SPADD SP AXPUSH AXPUSH BXPUSH CXPUSH SIPUSH DIMOV BX,0AHMOV SI,[BP+6]MOV DI,[BP+4]SUB DI,SIMOV [BP-2],DIMOV CX,[BP-2]ADD SI,[BP-2]DEC SIMOV WORDE PTR[BP-4],0001MOV DI,[BP+4]MOV WORD PTR[DI],0 NEXT:MOV AL,[SI]AND AX,000FHMUL WORD PTR[BP-4]ADD [DI],AXMOV AX,[BP-4]MUL BXMOV [BP-4],AXDEC SILOOP NEXTPOP DIPOP SIPOP CXPOP BXPOP AXMOV SP,BPPOP BPRET 0004CONV ASCBIN ENDPEND MAIN。

北理工汇编语言实验讲义-2016

北理工汇编语言实验讲义-2016

CPU与汇编语言实验讲义张芨高平信息系统及安全对抗实验中心2016第一部分汇编语言设计中使用的系统软件简介 (3)第一章 MASM for Windows 集成实验环境 (4)第二章调试程序DEBUG的使用 (9)第二部分宏汇编语言程序设计 (17)实验一 MASM for Windows 环境下的汇编语言编程环境使用 (17)实验二算术运算实验 (19)实验三字符串操作实验 (22)实验四分支和循环实验 (25)实验五子程序与模块化程序设计实验 (28)实验六磁盘文件读写实验 (32)第一部分汇编语言设计中使用的系统软件简介汇编语言实验操作流程图如图1所示。

图1汇编语言实验操作过程在实验室上机时,计算机有教师机统一开启,学生不要随意关机。

1)严禁带电操作;2)带上理论课教材、实验指导书及准备的实验程序;3)调试实验程序,记录实验结果;4)实验结束后,关闭所有应用程序。

第一章 MASM for Windows 集成实验环境1.熟悉MASM for Windows 集成实验环境运行实验室计算机的MASM for Windows 软件,如图2所示。

图 2 MASM for Windows运行环境2.编写运行第一个汇编程序1)输入汇编程序打开MASM for Windows 集成实验环境,在“程序输入区”编写一个显示“Hello World!”的程序。

如图3所示。

图3输入汇编程序红色方框内是需要输入的汇编程序代码,而其它的汇编程序代码该软件自动生成汇编程序框架。

说明:输入的内容分别是:红色框1内的代码:STRING DB 'Hello World',13,10,'$'红色框2内的代码:LEA DX,STRINGMOV AH,9INT 21H2)保存汇编程序点击“工具栏”中的“保存”按钮(或“文件/另存为”或“文件/保存”),弹出“另存为”对话框,键入文件名,如“我的第一个汇编程序”,然后点击“保存”即可。

《汇编语言程序设计》实验指导书

《汇编语言程序设计》实验指导书

实验一简单程序编制和上机过程一.实验目的1.掌握计算机常用代码的软件转换技术。

2.熟悉DEBUG软件的使用。

3.掌握简单程序的编程方法。

二.实验内容代码转换是计算机和I/O设备进行信息交换的重要技术之一。

各种I/O设备所提供和接收的数据编码不尽相同。

为了处理这些信息,计算机必须将各种不同编码形式的信息转换成别种适当的数据形式。

例如,键盘输入的数据均为ASC Ⅱ码形式存储在内存中,通常要求将其转换成相应的数据形式。

一般实现代码转换有两种方法:1.软件法利用CPU的算术逻辑运算功能,通过运算或查表实现各种数据代码间的转换。

该方法经济但速度慢。

2.硬件法利用专用代码转换集成电路进行转换。

如74LS74可把BCD码转换为七段代码。

这种方法需要硬件费用,但速度快。

本实验要求掌握软件编码转换技术。

计算机常用的代码有二进制、八进制、十六进制、BCD码、ASCⅡ码、七段码等,它们之间的相互关系如下表所示。

本次试验的内容是ASCⅡ码转换为未组合BCD码设从键盘输入十进制数的ASCⅡ码已存放在起始地址CS :150H的单元中,把它转换成未组合BCD码后,再分别存入起始地址为CS:15AH的单元中。

若输入的不是十进制数的ASCⅡ码,则相应存放结果单元的内容为“FF”。

提示:1.组合BCD码是一位十进制数字占一个字节,高半字节为0,低半字节为该十进制数字的BCD码。

ASCⅡ码转换为未组合BCD码只需减30H。

2.程序框图如下图所示。

3.程序执行前,需要在CS:150H内存缓冲区写入待转换的ASCⅡ码。

方法如下:方法一:用A命令-ACS:150 DB 35,39,30,41,32CS:155 ∧C方法二:用E 命令-ECS:150,35,39,30,41,32方法三:用F命令-FCS:150 L5 35,39,30,41,321.执行程序后检查执行结果可用D命令:-DCS:15ACS:15A 05,09,00,FF,02ASCⅡ码转换为未组合BCD码的程序流程图参考程序如下:ORG 100HMOV CX,0005HMOV DI,150HBB:MOV BL,0FFHMOV A,[DI]CMP AL,3AHJNB DONESUB AL,30HJB DONEMOV BL,ALDONE:MOV AL,BLMOV [DI+0AH],ALINC DILOOP BBINT 20HORG 150HDB 35H,39H,30H,41H,32H实验二顺序结构的程序设计一.实验目的1.掌握计算机常用代码的软件转换技术。

8086 汇编语言子程序程序设计

8086 汇编语言子程序程序设计

汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AX,4C00HINT 21HMAIN ENDPPROADD PROC NEARPUSH AXPUSH CXPUSH SIPUSH DIMOV SI,[BX]MOV DI,[BX+2]MOV CX,[DI]MOV DI,[BX+4]XOR AX,AXNEXT:ADD AX,[SI]ADD SI,2LOOP NEXTMOV [DI],AXPOP DIPOP SIPOP CXPOP AXRETPROADD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUP(?)CODE ENDSEND MAIN使用相应的文本编辑器建立文件LAB5.asm,内容如上所示。

二. 生成可执行文件:1.汇编:C:\masm> masm lab5;2.连接:C:\masm> link lab5;三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:四. 用debug 调试此程序时,第一条指令的段内EA 是多少?此程序数据段内偏移地址为0 的字单元数据为多少?其对应的机器指令是什么?-L ;加载程序文件lab5.exe-R ;查看IP 与CS 寄存器的内容-D DS:0 ;查看当前数据段内偏移地址为0 的字单元数据-U ;查看机器指令实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串源程序如下data segmentstr db 'display string',0data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dh,8mov dl,21mov cl,3mov si,offset strcall show_strmov ax,4c00hint 21h;----------------------------show_str proc nearpush axpush cxpush dxpush espush simov es:[bx], cljcxz okmov es:[bx+1], dlinc siadd bx, 2jmp short sok:pop sipop espop dxpop cxpop bxpop axret; 子程序:divdw; 要求:进行不会除法溢出的除法运算,被除数为dword,除数为word,结果为dword ; 参数:(ax) = 被除数dword型的低16位; (dx) = 被除数dword型的高16位; (cx) = 除数; 返回:(dx) = 结果的高16位; (ax) = 结果的低16位; (cx) = 余数divdw:mov bx, ax ; 缓存ax——被除数的低16位mov ax, dx ; ax = H,被除数的高16位mov dx, 0div cx ; ax 为商,dx为余数 = rem(H/N) * 65536push ax ; 结果的商,也就是最后要放在dx中的mov ax, bx ; dx为 rem(H/N) * 65536, 为高16位,ax为低16位,再进行一次除法运算div cx ; ax 为商——最后结果的低16位,dx为余数——为最后结果,应赋给cxmov cx, dxpop dxretcode endsend start实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能是数列求和实验二:实验三:实验总结这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!还犯了一些低级的错误,如将16位的寄存器的内容传送到字符型数字串里去,这很明显是不对的,在逆序时寄存器的高16位会直接把正常的数字字符冲掉,还有就是将当我直接将字型单元的内容传送字型单元时,编译器会报错,不过提示是它后面的指令错误。

子程序设计实验报告

子程序设计实验报告

子程序设计实验报告子程序设计实验报告1. 实验目的本实验旨在让学生通过设计和实现子程序,深入了解子程序的概念、使用方法和设计原则,培养学生的程序设计思维和编程能力。

2. 实验背景子程序是一个独立于主程序的独立程序段,它可以完成特定的任务并返回结果。

子程序可以被主程序调用多次,不仅可以提高程序的可读性和可维护性,还可以节省重复代码的编写和修改时间。

在实际的程序设计中,子程序被广泛应用于各种领域,如算法实现、功能模块划分、错误处理等。

3. 实验内容在这个实验中,我们将设计一个简单的子程序,实现一个猜数字的游戏。

游戏的规则是计算机随机一个1到100之间的整数,用户通过输入猜测的数字,计算机根据用户的猜测给出相应的提示,直到用户猜中为止。

实验要求:- 使用 Python 编程语言实现。

- 设计一个子程序,用于随机数。

- 设计一个子程序,用于接受用户输入并判断是否猜中。

- 设计一个子程序,用于给出猜测结果的提示。

4. 实验步骤4.1 设计子程序:随机数,我们需要设计一个子程序,用于一个1到100之间的整数。

可以使用 Python 的 random 模块中的 randint 函数来实现。

pythonimport randomdef generate_random_number():return random.randint(1, 100)4.2 设计子程序:接受用户输入并判断是否猜中接下来,我们设计一个子程序,用于接受用户输入的猜测数字,并判断是否猜中。

可以使用 Python 的 input 函数来接受用户输入,并使用 if 语句来判断用户猜测的数字是否与的随机数一致。

pythondef get_user_guess():guess = int(input(\。

北京理工大学汇编第四次(分支和循环程序设计实验)报告

北京理工大学汇编第四次(分支和循环程序设计实验)报告

北京理工大学汇编第四次(分支和循环程序设计实验)报告汇编第四次(分支和循环程序设计实验)报告一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。

二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。

汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减产生的结果来进行。

1.无条件转移指令JMP无条件转移指令JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。

2.条件转移指令JXX条件转移指令可分为三大类:1).简单条件转移指令。

根据单个标志位的状态判断转移条件。

下表表示条件转移指令标志位的状态:2).无符号数条件转移指令。

假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:3)带符号数条件转移指令。

在汇编程序设计中,要熟练使用循环指令和跳转指令等来实现循环,理解循环体结构中的初始化部分、循环体、结束部分,并且要结合前面分支结构相关的知识点,加深对循环结构的理解和掌握。

循环结构的组成及其设计方法的知识要点有:1、循环程序的基本结构通常由3部分组成1) 初始化部分建立循环初始值,为循环做准备,如设置地址指针,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX),数据寄存器(AX/DX)初值等.2) 循环体循环体是循环程序的主体,是程序中重复执行的程序段.它是由循环工作部分、修改部分、和循环控制部分。

①循环工作部分:完成程序功能的主要程序段,用于解决程序的实际任务;②修改部分:对循环参数进行修改,并为下一次循环做准备;③循环控制部分:判断循环结束条件是否满足。

汇编实验 子程序设计

汇编实验 子程序设计

实验五子程序结构设计一、实验目的1、加深对子程序的理解,掌握子程序的结构。

2、掌握子程序的设计、编写及调试方法。

3、掌握宏定义及宏调用的方法。

二、实验内容1、已知在内存数据段中GRADE开始单元连续存放着10个学生的成绩,试采用子程序结构编程实现以下功能:(1)找到最高成绩,将其偏移地址存放在内存单元MAX中。

(2)统计不及格的人数,存放在内存单元COUNT中。

(3)计算平均成绩(只取整数部分),并在屏幕上显示。

要求:将以上功能分别写成子程序,数据区定义如下DSEG SEGMENTGRADE DB 76,68,54,80,45,92,63,58,94,85MAX DW ?COUNT DB ?DSEG ENDS源代码:DATAS SEGMENTGRADE DB76,68,54,80,45,92,63,58,94,85MAX DW?COUNT DB?DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,datasMOV DS,AXCALL MAXGRADECALL BUJIGECALL A VGRADERETMAIN ENDPMAXGRADE PROC FARpush axpush cxpush simov cx,10mov ax,0mov si,axstart_loop:mov ax,word ptr grade[si]cmp ax,word ptr grade[si+1]jge bigmov ax,word ptr grade[si+1]big: inc siloop start_loopmov max,axpop sipop cxpop axretMAXGRADE ENDPBUJIGE PROC FARPUSH SIPUSH CXPUSH AXMOV AX,0MOV COUNT,0MOV CX,10LOOP_START2:MOV AX,WORD PTR GRADE[SI]CMP AX,60JG SMALL2INC COUNTSMALL2:INC SILOOP LOOP_START2POP AXPOP CXPOP SIRETBUJIGE ENDPA VGRADE PROC FARpush dssub ax,axpush axmov ax,DATASmov ds,axmov cx,10 ;循环控制mov bx,0mov dx,0 ;暂存总成绩avg_grade_1:mov al,grade[bx]cbwadd dx,axinc bxloop avg_grade_1mov ax,dxmov bl,10div bl ;除第一次sub ah,ah ;清零div bl ;除第二次push axadd al,30hmov dl,almov ah,02int 21hpop axadd ah,30hmov dl,ahmov ah,02int 21hmov ah,4chint 21hretA VGRADE ENDPCODES ENDSEND2、编写程序实现十进制数的加减运算。

北京理工大学cup与汇编实验五

北京理工大学cup与汇编实验五

本科实验报告实验名称:子程序与模块化程序设计实验1.DATAS SEGMENTBUF1 DB'data,name,time,file,code,path,user,exit,quit,text$';此处输入数据段代码LENTH EQU $-BUF1BUF2 DB 6DB?DB 6 DUP(?)BUF3 DB'NOT FOUND$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSNF: MOV DX,OFFSET BUF3MOV AH,9HINT 21HJMP ENNO:ADD SI,7HSBB SI,BXCMP SI,LENTHJAE NFMOV BX,2HJMP LNEXT PROC NEAR MOV AL,BUF2[BX] CMP AL,BUF1[SI]JNE NOINC BXINC SIRETNEXT ENDP START:MOV AX,DATAS MOV DS,AXMOV DX,OFFSET BUF2 MOV AH,0AHINT 21HMOV BX,2HL: CALL NEXTCALL NEXTCALL NEXTCALL NEXTDEC SIDEC BXSBB SI,3HMOV AL,'d'MOV BUF1[SI],AL INC SIMOV AL,'i'MOV BUF1[SI],AL INC SIMOV AL,'s'MOV BUF1[SI],AL INC SIMOV AL,'k'MOV BUF1[SI],AL MOV DL,0AHMOV AH,2HINT 21HMOV DX,OFFSET BUF1 MOV AH,9HINT 21HJMP ENLOOP L EN:MOV AH,4CHINT 21H CODES ENDS ENDSTART3.DATAS SEGMENTBUF1 DB'data,name,time,file,code,path,user,exit,quit,text$';此处输入数据段代码LENTH EQU $-BUF1BUF2 DB 6DB?DB 6 DUP(?)BUF3 DB'NOT FOUND$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS NF: MOV DL,0AHMOV AH,2HINT 21HMOV DX,OFFSET BUF3MOV AH,9HINT 21HJMP ENNO:ADD SI,7HSBB SI,BXCMP SI,LENTHJAE NFMOV BX,2HNEXT PROC NEAR MOV AL,BUF2[BX] CMP AL,BUF1[SI]JNE NOINC BXINC SIRETNEXT ENDP START:MOV AX,DATAS MOV DS,AXMOV DX,OFFSET BUF2 MOV AH,0AHINT 21HMOV BX,2HL: CALL NEXTCALL NEXTCALL NEXTCALL NEXTINC SIINC BXSHANCHU:MOV AL,BUF1[SI] MOV BUF1[SI-5],AL CMP SI,32HJE SHUCHU INC SIMOV AL,BUF1[SI] MOV BUF1[SI-5],AL INC SIMOV AL,BUF1[SI] MOV BUF1[SI-5],AL INC SIMOV AL,BUF1[SI] MOV BUF1[SI-5],AL INC SIMOV AL,BUF1[SI] MOV BUF1[SI-5],AL INC SILOOP SHANCHU SHUCHU:MOV DL,0AHMOV AH,2HINT 21HMOV DX,OFFSET BUF1 MOV AH,9HINT 21HJMP ENLOOP LEN:MOV AH,4CHINT 21H CODES ENDS ENDSTART4.DATA SEGMENTBUF DB 5DB?DB 5 DUP(?)MINUS DW 10STORE DB 6 DUP(0)PRINT DB 10,13STORE2 DB 5 DUP(0),10,13,'$'MINUS2 DW 2EROR DB 13,10,'INPUT ERROR!$' DATA ENDSCODE SEGMENTASSUME CS:CODE,ES:DATA,DS:DATA MAIN PROC FARMOV AX,DATAMOV ES,AXMOV DS,AXR: CALL INPUTCALL CHANGECALL OUTPUTJMP RMOV AX,4C00HINT 21HMAIN ENDPCHANGE PROCMOV AX,WORD PTR BUF+2XCHG AL,AHCMP AH,39HJBE TO5SUB AH,37HTO5: SUB AH,30HTP: CMP AL,39HJBE TO1SUB AL,37HJMP TP1TO1: SUB AL,30HTP1: MOV CL,4SHL AH,CLOR AH,ALMOV AL,0PUSH AXMOV AX,WORD PTR BUF+4 XCHG AL,AHCMP AH,39HJBE TO3SUB AH,37HJMP TP3TO3 : SUB AH,30HTP3: CMP AL,39HJBE TO4SUB AL,37HTO4: SUB AL,30H TP4: MOV CL,4 SHL AH,CLOR AL,AHMOV AH,0POP DXOR AX,DXRETCHANGE ENDP INPUT PROCLEA DX,BUFMOV AH,0AHINT 21HCALL CHECKRETINPUT ENDPOUTPUT PROC MOV CX,5LEA BX,STORE2+4 AGAIN4: MOV DX,0DIV MINUSMOV [BX],DLOR BYTE PTR [BX],30HDEC BXLOOP AGAIN4LEA DX,PRINTMOV AH,9INT 21HRETOUTPUT ENDPERROR PROCLEA DX,ERORMOV AH,9INT 21HMOV AX,4C00HINT 21HERROR ENDPCHECK PROCMOV CL ,BUF+1LEA BX,BUF+2AGAIN3: CMP BYTE PTR [BX],41H JB TOCMP BYTE PTR [BX],46H JA TOINC BXDEC CLJNZ AGAIN3JMP TO2TO: CALL ERRORTO2: RETCHECK ENDPCODE ENDSEND MAIN。

汇编(循环、分支、子程序)实验报告

汇编(循环、分支、子程序)实验报告
1.设计:
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。

掌握子程序调用过程中近程调用与远程调用的区别。

熟练掌握码型变换的程序。

实验内容从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。

要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。

数据可循环输入,遇‘00’结束。

实验准备预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。

熟悉键盘输入和字符显示的程序段的编制。

实验步骤编辑、汇编源程序,生成可执行文件。

执行程序,检查输入、输出结果,看是否正确。

如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。

用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。

实验报告要求分析近程调用和远程调用的主要区别。

用DEBUG命令观察执行过程有何不同。

分析实验结果及所遇到的问题的解决方法。

程序流程图开始TRAN程序标准序开始读入十进制数据放AX中AXAXAND0F0FH是00?YBLALN调用转换子程序结束AL左移3位回车、换行BL左移1位于ALAL+BL主程序流程图ALAL+AHRET转换子程序TRAN流程图程序清单STASEGMENTSTACK’STACK’DB100DUP(0)STAENDS GSAGSEGMENTPARA‘CODE’ASSUMECS:CSAG MAINPROCFARSTRAT:PUSHDSSUBAX,AXPUSHAXREV:MOVAH,1INT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030H JEENDTRAN CALLNEARPTRTRAN CALLFARPTRCON MOVAL,0DH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP JMPREV ENDTRAN:RET MAINENDP TRANPROCNEAR ANDAX,0F0FHMOVBL,ALMOVBL,ALMOVCL,3SHLAL,CLMOVCL,1SHLBL,CLADDAL,BLADDAL,AHRETTRANENDPCSAGENDS CSBGSEGMENTPARA’CODE’ASSUMECS:CSBG CONPROCFARPUSHAXMOVCL,4 SHRAL,CL ADDAL,30H CMPAL,39H JBECON2 ADDAL,7CON2:PUSHAX MOVAL,0DH CALLFARPTRDISP MOVAL,OAH CALLFARPTRDISP POPAX CALLFARPTRDISP POPAX ANDAL,0FHADDAL,30H CMPAL,39H JBECON1ADDAL,7CON1:CALLFARPTRDISP RETCONEDNP DISPPROCFAR PUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPENDPCSBGENDS ENDSTART。

实验五汇编语言程序设计实验(一)

实验五汇编语言程序设计实验(一)

实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。

2、掌握循环程序的设计。

3、掌握汇编语言主程序与子程序的调用和参数传递。

4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。

二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。

要求统计字符串用子程序完成。

data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。

2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。

写出操作步骤,程序清单,程序注释,实验现象。

北京理工大学微机原理实验报告

北京理工大学微机原理实验报告

微机原理与接口技术实验报告实验内容:汇编语言程序设计实验组别:12姓名:班级:学号:一、实验目的1、熟悉IDE86集成开发环境的使用。

2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。

3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。

4、掌握利用汇编实现求和与求最值的方法。

5、掌握利用汇编实现数制转换的方法。

6、巩固理论知识,锻炼动手编程,独立思考的能力。

二、实验内容(具体内容)1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。

并查看前5个,前8个数之和以及各寄存器和内存的状态。

2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及MIN。

3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。

要求实现数据显示,并返回DOS状态。

三、实验方法1、设计思路(1)实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。

(2)实验2的设计思路:先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。

将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态(3)实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。

先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX 依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。

北理工汇编语言实验报告5

北理工汇编语言实验报告5

汇编语言实验报告实验五子程序设计实验(设计性实验)班级:05611102姓名:肖枫学号:1120111431实验日期:2013.9.11晚上实验四子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名 PROC [near/far]过程体RET过程名 ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC [NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名 ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识A)子程序知识要点:1.掌握子程序的定义语句;过程名 PROC [near/far]过程体RET过程名 ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1、)子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC [NEAR/FAR]PUSH AXPUSH BX.PUSH DXPOP DX.POP AXRET过程名 ENDP3.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。

2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。

3.用堆栈传递参数利用共享堆栈区,来传递参数是重要的的方法之一。

B)字符、字符串输入输出知识要点:在实际应用中,经常需要从键盘输入数据并将结果等内容显示到屏幕上,方便程序控制及查看结果。

汇编语言的数据输入和输出分成两类,一是单个字符数据的输入输出,一是字符串数据的输入输出。

都可以通过DOS 功能调用来实现,下面就分别介绍下用来实现数据输入输出的功能调用的使用方法。

1、单个字符输入单个字符输入可以利用DOS 的1 号功能调用来完成,使用方法为:MOV AH,1INT 21H这两条语句执行后,光标会在屏幕上闪烁,等待输入数据,输入的数据以ASCII码形式存储在AL 寄存器中。

2、单个字符输出单个字符输出可利用DOS2 号功能调用来完成,使用方法为:MOV DL,’?’MOV AH,2INT 21H单个字符输出需要把要输出字符的ASCII 码放在DL 寄存器中。

3、字符串输入从键盘输入一串字符串可以利用DOS 的10 号功能调用来完成,使用方法为:BUF DB 50 ;预定义可以输入的最大字符个数DB ? ;实际输入字符个数,根据输入自动统计DB 50 DUP (?) ;存放输入字符串数据缓冲区LEA DX,BUFMOV AH,10INT 21H4、字符串输出字符串输出可由DOS 9 号功能调用来完成,使用方法为:STRING DB ‘HELLO$’LEA DX,STRINGMOV AH,9INT 21HC)表的处理知识要点:表的处理在实际数据处理中应用较为广泛,主要有排序、搜索、插入和删除等操作。

有一些常用的冒泡法、对分搜索法等需要掌握。

四、实验内容与步骤1、从键盘输入一串字符串(显示提示)到内存中,在该字符串的某一个指定位置,插入某一字符或删除某一字符,并显示操作后的字符串。

2、编写程序把从键盘输入的四位十六进制数,转换为十进制形式在屏幕上打印出来。

3、从键盘输入(显示提示)十个2 位十进制数(正数)到内存中,按从小到大排序,然后把该数以十六进制形式在屏幕上打印出来。

4、英文人名排序。

从终端键入20 个人名,当所有人名都键入后,按字母上升的次序将人名排序,并在屏幕上显示已经排好序的人名。

注意:以上各题要求用子程序方法实现,每个题目至少包含2 个子程序。

涉及到初始数据的,同学们自行给出多组数据,反复加以验证各题程序。

五、实验要求与提示1、实验要求(1)画出各程序流程图;(2)列出程序清单,加上适量注释;(3)回答思考问题;(4)记录实验结果;(5) 完成实验报告(实验材料上的内容简写,自己的工作要详尽)。

六、思考与练习以及测评标准1.字符串在内存中是如何存储的?2.屏幕有多个字符串显示时,如何换行?七、程序流程图Y八、实验结果九、思考题1.以8位ASCII码的形式连续存储2.先输出换行符,然后输出回车符十、程序代码datas segmentbuf4 db 460 dup('$')bp4 dw 20 dup(0)mark db '@@'num41 dw 20num42 dw 19num3 db 20 dup(0)num3t db 10 dup(0)num31 dw 10num32 dw 9num2 db 0,0,0,0num22 dw 0tempio db 0temp dw 0tab db '0123456789abcdef'tip1 db 'Please input:$'tip2 db 'Please input 10 DEC numeral with space:$'buf1 db 20db ?db 20 dup('$')num1 db 0num1t db 3db ?db 2 dup(0)temp1 db ' 'datas endsstacks segmentstack dw 32 dup(0) stacks endscodes segmentassumeds:datas,ss:stacks,cs:codesstart: mov ax,datasmov ds,axmov es,axmov ax,stacksmov ss,ax ;;;;;;;;;;;;;;;;;;;;1startlea si,tip1call putscall newlinelea si,buf1call getslea si,num1tcall getsinc siinc simov ah,ds:[si]inc simov al,ds:[si]mov bl,'0'sub ah,blsub al,blmov bl,almov al,ahmov ah,0mov cl,10mul cladd al,blmov num1,alcall inputcall newlinemov bl,tempiomov temp1,bllea si,buf1inc siinc simov cx,0mov cl,num1dec cljz l11l1: mov al,ds:[si]mov tempio,alcall outputinc siloop l1l11: mov al,temp1cmp al,0dhjz l12mov tempio,alcall outputdec sil12: inc sicall putscall newlinecall newline;;;;;;;;;;;;;;;;;;;;1end;;;;;;;;;;;;;;;;;;;;2startmov ax,0lea si,num2call inputmov al,tempiosub al,'0'mov ds:[si],alinc sicall inputmov al,tempiosub al,'0'mov ds:[si],alinc sicall inputmov al,tempiosub al,'0'mov ds:[si],alinc sicall inputmov al,tempiosub al,'0'mov ds:[si],alcall newlinelea si,num2mov cx,4mov dx,0ahl2: cmp ds:[si],dljb l21mov al,ds:[si]sub al,7mov ds:[si],al l21: inc siloop l2lea si,num2mov ah,ds:[si]mov cx,4shl ah,clinc simov bl,ds:[si]add ah,blinc simov al,ds:[si]mov cx,4shl al,clinc simov bl,ds:[si]add al,blmov num22,ax;1mov dx,0mov cx,2710hdiv cxmov temp,dxadd ax,'0'mov tempio,alcall outputmov ax,temp;2mov dx,0mov cx,3e8hdiv cxmov temp,dxadd ax,'0'mov tempio,alcall outputmov ax,temp;3mov dx,0mov cx,64hdiv cxmov temp,dxadd ax,'0'mov tempio,alcall outputmov ax,temp;4mov dx,0mov cx,0ahdiv cxmov temp,dxadd ax,'0'mov tempio,alcall outputmov ax,temp;5add ax,'0'mov tempio,alcall outputcall newlinecall newline ;;;;;;;;;;;;;;;;;;;;2end ;;;;;;;;;;;;;;;;;;;;3startlea si,tip2call putscall newlinelea si,num3mov cx,20l3: call inputmov dl,' 'cmp dl,tempiojz l31mov al,tempiosub al,'0'mov ds:[si],alinc sidec cxjz l32l31: jmp l3l32:lea si,num3lea di,num3tmov cx,10l33: mov ax,0mov al,ds:[si]mov dl,10mul dlinc siadd al,ds:[si]mov es:[di],alinc siinc diloop l33;sortsort31: lea si,num3tmov ax,9mov num32,axsort32: mov al,ds:[si]inc sicmp al,ds:[si]js skip31xchg al,ds:[si]mov ds:[si-1],alskip31: mov cx,num32dec num32loop sort32mov cx,num31dec num31loop sort31call newlinemov num31,10lea si,num3tl34: mov al,ds:[si]mov tempio,alinc sicall printnumbcall spacemov cx,num31dec num31loop l34call newlinecall newline;;;;;;;;;;;;;;;;;;;;3end;;;;;;;;;;;;;;;;;;;;4startlea si,buf4lea di,bp4mov cx,20;inputl4: mov al,20mov ds:[si],almov dx,siadd dx,2mov es:[di],dxinc diinc dicall getsadd si,23loop l4;sortl41: lea si,bp4mov ax,19mov num42,axl42: mov di,ds:[si+2]mov temp,simov ax,ds:[si]mov si,axmov cx,20repe cmpsbjs skip41 ;不需修改mov si,temp ;修改mov ax,ds:[si]xchg ax,ds:[si+2]mov ds:[si],axskip41: mov si,tempinc siinc simov cx,num42dec cxmov num42,cxinc cxloop l42mov cx,num41dec cxmov num41,cxinc cxloop l41;ouputcall newlinelea di,bp4mov cx,20 l43: mov temp,cxmov si,es:[di]call putscall newlineinc diinc dimov cx,temploop l43 ;;;;;;;;;;;;;;;;;;;;4end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Q: mov ah,4chint 21h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;printnumb:mov al,tempiomov cl,4shr al,cllea bx,tabmov ah,0add bx,axmov dl,ds:[bx]mov ah,2int 21hmov al,tempiomov cl,0fhand al,cllea bx,tabmov ah,0add bx,axmov dl,ds:[bx]mov ah,2int 21hretprintnum: ;outputthe ASCII in temp W;1mov ax,tempmov cx,4shr ah,clmov al,ahmov ah,0lea bx,tabadd bx,axmov dl,ds:[bx]mov ah,2int 21h;2mov ax,tempand ah,0fhmov al,ahmov ah,0lea bx,tabadd bx,axmov dl,ds:[bx]mov ah,2int 21h;3mov ax,tempmov cx,4shr al,clmov ah,0lea bx,tabadd bx,axmov dl,ds:[bx]mov ah,2int 21h;4mov ax,tempand al,0fhmov ah,0lea bx,tabadd bx,axmov dl,ds:[bx]mov ah,2int 21hretgets: m ov ah,10mov dx,siint 21hcall newlineretpgets: mov cl,ds:[si]mov ch,0inc siinc silpgets: mov al,ds:[si]cmp al,0dhjz pendmov tempio,alcall outputinc siloop lpgets pend: ret puts: mov ah,9mov dx,siint 21hretinput: mov ah,1int 21hmov tempio,alret newline:mov ah,2mov dl,0dhint 21hmov ah,2mov dl,0ahint 21hretspace: mov dl,' 'mov ah,2int 21hretoutput: mov ah,2mov dl,tempioint 21hretcodes endsend start。

相关文档
最新文档