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

合集下载

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

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

本科实验报告实验名称:分支和循环实验一、实验目的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.掌握计算机常用代码的软件转换技术。

  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。

相关文档
最新文档