北京理工大学 汇编最终实验报告
北京理工大学总汇编实验报告材料实验四
本科实验报告实验名称:分支和循环实验一、实验目的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。
北京理工大学汇编实验报告3
北京理工大学汇编实验报告3本科实验报告实验名称:实验三字符串操作实验课程名称:课程设计Ⅰ(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:苏京霞实验类型:☑原理验证□综合设计□自主创新学生姓名:罗逸雨学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档:专业:通信工程成绩:CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。
当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。
经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。
当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
3)字符串操作指令lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI;stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI;movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI;scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;rep:重复其后的串操作指令。
北京理工大学汇编语言实验报告一
汇编语言实验报告实验一 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,才能实现累加并终结。
北京理工大学CPU实验一
实验一MASM for Windows 环境下的汇编语言编程环境使用一. 实验目的1.掌握MASM for Windows 环境下的汇编语言编程环境使用;2.掌握汇编语言程序设计的基本流程;3.掌握8086/8088 基本指令的使用方法和功能;4.熟练掌握DEBUG 的使用方法。
二.实验基本原理1.设计思想建立源地址指针和目标地址指针,将字节数送入CX寄存器,取源数据一个字节送入AL中,将源数据再从AL中送入目标地址单元中,最后判断是否传送完毕。
2.相关知识(1).通用传送指令包括MOV、PUSH、POP、XCHG和XLAT指令,本次实验用到的是MOV 和PUSH。
a.基本传送指令MOV,指令格式及操作:MOV DST,SRC ;DST为目标操作数,SRC为源操作数。
该指令功能是将员操作数内容传送到目标操作数,但源操作数内容保持不变。
其特点是:①进行8位、16位数据操作;②适用于各种寻址方式;③源操作数和目标操作数数据类型必须一致;④立即数不能作为目标操作数,也不能直接传送到段寄存器;⑤存储器之间不能直接传送;⑥CS不能作为目标操作数。
b.压入指令PUSH,指令格式及操作:PUSH SRC ; SRC为源操作数,可以是寄存器、段寄存器或者存储器操作数,但不允许为立即数指令功能是:首先调整堆栈指针、然后将16位源操作数送入SP所指的存储单元中。
(2)OFFSET是将数值回送变量或标号的偏移地址值。
三.实验程序清单DATA SEGMENTBUF1 DB 1H,2H,3H,4H,5H,6H,7H,8H,9H,0AH,0BH,0CH,0DH,0EH,0FHBUF2 DB 20 DUP(?)COUNT EQU $-BUF1DATA ENDSSTACK1 SEGMENT STACKDB 20 DUP(?)STACK1 ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK1,CS:CODESTART PROC FARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV SI,OFFSET BUF1 ;建立源地址指针MOV DI,OFFSET BUF2 ;建立目标地址指针MOV CX,COUNT ;字节数送入CX 寄存器L1: MOV AL,[SI] ;取源数据一个字节送入AL 中MOV [DI],AL ;将源数据送入目标地址单元中INC SIINC DIDEC CXJNZ L1 ;判断是否传送完毕EXIT: RETSTART ENDPCODE ENDSEND START四.实验步骤1. 利用MASM for Windows 输入源程序,然后运行,如果有误需要修改2.利用debug 命令,使用L、U、G 及DDS:0 命令调试并运行程序,具体命令使用方法:(1)用DEBUG 的R 命令查看、改变CPU 中寄存器的内容(2)用DEBUG 的D 命令查看内存的内容;(4)用DEBUG 的U 命令将内存中的机器指令翻译成汇编指令五.实验结果BUF1的数据存入BUF2中。
北京理工大学汇编实验五
一、实验目的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、调用子程序时寄存器及所用存储单元内容的保护。
北京理工大学汇编实验二报告
北京理工大学汇编实验二报告本科实验报告实验名称:算术运算类操作实验课程名称:CPU与汇编实验实验时间:2015.10.29 任课教师:王耀威实验地点:10-102实验教师:潘丽敏实验类型:□原理验证■综合设计□自主创新学生姓名:王晓玥学号/班级:1120131332/05111311 组号:学院:信息与电子学院同组搭档:专业:信息工程成绩:一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。
6、掌握 BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、加减法处理指令主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。
2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。
3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的 BCD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。
8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表 1 所示的数据类型进行数据运算。
表 1-2-1 数据类型数据运算表数制二进制BCD码带符号无符号组合非组合运算符+、-、×、÷+、-+、-、×、÷操作数字节、字、多精度字节(二位数字)字节(一位数字)四、实验内容与步骤1、对于两组无符号数,087H 和 034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:(1)实验流程将一组操作数分别用ADD,SUB,MUL,DIV运算(2)实验代码:DATAS SEGMENTBUF1 DB 087HBUF2 DB 034HBUF3 DB 4 DUP(?);此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,0MOV SI,AX;两数相加MOV AL,BUF1MOV BL,BUF2ADD AL,BLMOV BUF3[SI],ALMOV AL,0MOV AL,0INC SIMOV BUF3[SI],AL;两数相减MOV AL,BUF1MOV BL,BUF2SUB AL,BLINC SIMOV BUF3[SI],ALMOV AL,0SBB AL,0INC SIMOV BUF3[SI],AL;两数相乘MOV AL,BUF1MOV BL,BUF2MUL BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;两数相除,AL中存放商,AH中存放余数MOV AX,0MOV AL,BUF1MOV BL,BUF2DIV BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START(3)实验结果:1)第一组操作数87H,34H2)第二组操作数0C2H,5FH(4)计算结果计算状态标志表达式结果CF AF ZF OF SF PF 087H+034H 00BB 0 0 0 0 1 1 087H-034H 0053 0 0 0 1 0 1 087H*034H 1B6C 1 0 0 1 0 0 087H/084H 02(1F) 1 0 0 0 0 1 0C2H+05FH 0121 0 0 0 0 0 0 0C2H-O5FH 0063 0 0 1 0 0 1 0C2H*05FH 47FE 0 0 0 0 0 1 0C2H/05FH 02(04) 0 0 0 0 0 0(5)各运算对状态标志位的影响及其意义。
北京理工大学汇编实验五实验报告概要
本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的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.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。
北京理工大学微机原理实验报告
微机原理与接口技术实验报告实验内容:汇编语言程序设计实验组别: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中。
北京理工大学汇编语言实验报告3字符串操作实验(设计性实验)
组 号:
同组搭档:
成 绩:
一、实验要求和目的
1.了解汇编语言字符串处理基本流程; 2.熟悉汇编语言字符串处理基本指令的使用方法; 3.掌握利用汇编语言实现字符串处理的程序设计方法。
二、软硬件环境
1、硬件环境:计算机系统 windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
str1 db 'fs3qas' count equ $-str1 DATAS ENDS copy segment
str2 db count dup(?) copy ends
CODES SEGMENT ASSUME CS:CODES,DS:DATAS,es:copy
START: MOV AX,DATAS MOV DS,AX mov es,dx;开始复制 mov cx,count cld rep movsb MOV AH,4CH INT 21H
这里面显示的bx=1,符合实际情况 若修改一下源代码,把字符串多加几个‘.’则结果如下:
代码中有3个‘.’运行结果中bx=3,符合实际情况,源代码题设要求
五、实验要求与提示
1、实验要求 (1)画出各程序流程图; (2)列出程序清单,加上适量注释; (3)回答思考问题; (4)记录实验结果; (5) 完成实验报告(实验材料上的内容简写,自己的工作要详尽)。 2、实验提示: A)自动获取字符串长度,可以利用地址计数器$ 表达式获得。 B)字符/字符串输入输出 主要利用 DOS 的INT 21H 系统功能调用来实现字符或字符串的输入/输出操作,其中1 号功能表示输入字符;2 号功能表示输出字符;0A 号功能表示输入字符串;09 号功能表 示 输出字符串。如果大家想现在使用可以详细查阅相关资料,在后面的课程内容和实验上会详 细学习,这里简单示例提示一下: (1)显示单个字符可以用DOS 的INT 21H 的2 号功能,将字符放在DL 寄存器中,2 号放在AH 寄存器中。 MOV AL, ’*’ MOV AH,2 INT 21H (2)数据区中的字符串应以$结尾,DS:DX=串地址;如果提前已经定义需要显示的字 符串,显示字符串可以用如下功能调用: LEA DX,STR MOV AH,9 INT 21H
北京理工大学电子信息类汇编语言实验报告――文件操作.
第六章磁盘文件存取实验(设计性实验一、实验要求和目的1. 理解文件、目录的概念;2. 了解 FCB(文件控制块方式文件管理方法;3. 掌握文件代号式文件存取方式;4. 学习使用文件指针读取文件二、软硬件环境1. 硬件环境:计算机系统 windows;2. 软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识单元DOS 功能调用中断(INT 21H提供了两类磁盘文件管理功能,一类是 FCB(文件控制块方式,另一类是文件代号式存取方式。
对于文件的管理,实际上是对文件的读写管理, DOS 设计了四种存取文件方式:顺序存取方式、随机存取方式、随机分块存取方式和代号法存取方式。
文件的处理步骤A 写之前必须先建立文件、读之前必须先打开文件。
B 写文件之后一定要关闭文件。
通过关闭文件,使操作系统确认此文件放在磁盘哪一部分,写后不关闭会导致写入文件不完整。
1、文件代号式存取方式: 当用户需要打开或建立一个文件时,必须提供文件标识符。
文件标识符用ASCII Z 字符串表示。
ASCII Z 字符串是指文件标识符的 ASCII 字符串后面再加1 个“0”字符。
文件标识符的字符串包括驱动器名、路径名和文件名。
其格式为[d:][path]filename[.exe]其中 d 为驱动器名,path 为路径名,.exe 为文件名后缀。
中断 21H 提供了许多有关目录和文件操作的功能,其中文件代号式存取方式常用的功能如下:2、操作目录的常用功能39H——创建目录 3BH——设置当前目录3AH——删除目录 47H——读取当前目录有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料之目录控制功能。
3、用文件句柄操作文件的常用功能3CH——创建文件 4EH——查找到第一个文件3DH——打开文件 4FH——查找下一个文件3EH——关闭文件 56H——文件换名3FH——读文件或设备 57H——读取/设置文件的日期和时间40H——写文件或设备 5AH——创建临时文件41H——删除文件 5BH——创建新文件42H——设置文件指针 67H——设置文件句柄数(最多文件数43H——读取/设置文件属性 6CH——扩展的打开文件功能有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料之文件操作功能。
北京理工大学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。
北理工汇编语言实验报告3
汇编语言实验报告实验三字符串操作实验(设计性实验)班级:05611102姓名:肖枫学号:1120111431实验日期:2013.9.7下午一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言字符串处理基本指令的使用方法;3.掌握利用汇编语言实现字符串处理的程序设计方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、字符串处理基本操作流程(1)利用SI 寄存器保存源串首地址;(2)利用DI 寄存器保存目的串首地址;(3)利用CX 寄存器保存字符串长度;(4)利用CLD 或STD 指令设置字符串处理方向;(5)利用字符串处理指令实现相关处理。
其中,CLD 指令使DF=0,在执行串处理指令时可使地址自动增量;STD 使DF=1,在执行串处理指令时可使地址自动减量。
提示:字符串处理一般都涉及到源串和目的串,汇编语言规定源串在数据段中定义,目的串在附加段中定义。
2、重复前缀指令,重复次数由计数寄存器CX 中存放的值决定,指令每重复执行一次,计数器CX 中值减1,当CX 中值减至0 时,停止重复执行,继续执行下一条指令REP 无条件重复前缀,重复串操作直到计数寄存器的内容CX 为0 为止。
经常与REP配合工作的字符串处理指令有MOVS、STOS 和LODS。
REPE/REPZ 判断计数寄存器的内容CX 是否为0 或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS 和SCAS。
REPNE/REPNZ 判断计数寄存器的内容是否为0 或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS 和SCAS。
3、字符串处理基本指令(1)MOVS 传送指令格式:MOVS DST,SRC 或MOVSB(传送字节)或MOVSW(传送字)。
北理工汇编语言实验报告6
汇编语言实验报告
第六章 磁盘文件存取实验(设计性实 验)
班级:05611102 姓名:肖枫
学号:1120111431 实验日期:2013.9.14下午
第六章磁盘文件存取实验(设计性实验) 一、实验要求和目的
1. 理解文件、目录的概念; 2. 了解 FCB(文件控制块)方式文件管理方法; 3. 掌握文件代号式文件存取方式; 4. 学习使用文件指针读取文件
2、编写一个创建文件的程序,其要求如下: 1)用键盘输入文件名(可包含路径),若输入的字符串为空,则程序运行 结束; 2) 若目录创建成功,显示成功信息,否则,显示创建失败信息; 3) 从键盘输入20 个字符存放到新建立的文件中。 代码及流程图如下:
data segment handle dw ? msg1 db 'Please input the file route:', 0dh, 0ah, '$' msg2 db 0dh, 0ah, 'Error: create file failed!', 0dh, 0ah, '$' msg3 db 0dh, 0ah, 'Create file successful!', 0dh, 0ah, '$' msg4 db 0dh, 0ah, 'Error: write file failed!', 0dh, 0ah, '$' msg5 db 0dh, 0ah, 'Please input 20 characters:', 0dh, 0ah, '$' fn_buf db 64 db ? fn_str db 64 dup(0) wf_buf db 64
北京理工汇编语言实验四实验报告
汇编语言实验四实验报告——分支和循环程序设计实验(设计性实验)班级:05211102姓名:庞珂学号:1120111306日期:2013.9.10早8:30:00~11:30分支和循环程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令JMP无条件转移指令JMP 是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令JXX条件转移指令可分为三大类:标志位指令转移条件意义CF JC CF=1 有进位/借位JNC CF=0 无进位/借位ZF JE/JZ ZF=1 相等/等于0JNE/JNZ ZF=0 不相等/不等于0SF JS SF=1 是负数JNS SF=0 是正数OF JO OF=1 有溢出JNO OF=0 无溢出PF JP/JPE PF=1 有偶数个1JNP/JP0 PF=0 有奇数个12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<BJBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
北理工汇编语言实验报告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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。使用Debug 查看Positive、Negative 和 Zero 三个变量的数据。
五、实验步骤
1. 输入给出的程序
发现其中有错误,根据提示和观察,发现:
计算
状态标志
表达式 结果
cf
af
zf
of
sf
pf
087h+034h 00bb
0
1
0
0
0
1
087h-034h 0053
0
0
0
0
0
0
087h*034h 1b6c
0
0
0
0
0
1
087h/034h 0002
0
0
0
0
0
1
0c2h+5fh 0121
0
1
0
0
0
1
0c2h-5fh 0063
0
1
0
0
0
1
0c2h*5fh 47fe
二、软硬件环境
1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识
本实验主要进行算术运算程序设计和调试,涉及到的知识点包括: 1.加减法处理指令 主要有加法指令 ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。 2.乘除法指令和符号位扩展指令 主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号 数除法指令IDIV,以及符号位从字节扩展到字的指令CBW 和从字扩展到双字的指令CWD。 3.BCD 码的调整指令 主要有非压缩的 BCD 码加法调整指令DAA,压缩的BCD 码减法调整指令DAS,非压 缩的BCD 码加法调整指令AAA,非压缩的BCD 码减法调整指令AAS,乘法的非压缩BCD 码调整指令AAM,除法的非压缩BCD 码调整指令AAD。 8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令, 可对表 1 所示的 数据类型进行数据运算。
从第一个 数开始
STACKS SEGMENT ;此处输入堆栈段代码
STACKS ENDS
数字为正?为 负?为零?
CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS MOV DS,AX mov cx,3 mov si,0 L1:mov al,ary[si] cmp al ,0 jg L2 jl L4 inc zero jmp L3 L2:inc positive jmp L3 L4: inc negative L3:inc si dec cx jnz L1 mov ax,positive mov bx,negative mov dx,zero
汇编语言程序设计上机开发过程如图 1.1 所示。
四、实验内容 1、汇编、链接并调试给出的简单程序,找出程序中的错误。
(一)录入并建立汇编语言源程序文件(ASM 文件) (二)用汇编程序 MASM 将 ASM 文件汇编成目标程序文件(OBJ 文件) (三)用连接程序 LINK 生成可执行程序文件(EXE 文件) (四)程序的调试
三、实验涉及的主要知识
1、字符串处理基本操作流程 (1)利用SI 寄存器保存源串首地址; (2)利用DI 寄存器保存目的串首地址; (3)利用CX 寄存器保存字符串长度; (4)利用CLD 或STD 指令设置字符串处理方向; (5)利用字符串处理指令实现相关处理。 其中,CLD 指令使DF=0,在执行串处理指令时可使地址自动增量;STD 使DF=1,在 执行串处理指令时可使地址自动减量。 提示:字符串处理一般都涉及到源串和目的串,汇编语言规定源串在数据段中定义,目 的串在附加段中定义。 2、重复前缀指令,重复次数由计数寄存器CX 中存放的值决定,指令每重复执行一次, 计数器CX 中值减1,当CX 中值减至0 时,停止重复执行,继续执行下一条指令 REP 无条件重复前缀,重复串操作直到计数寄存器的内容CX 为0 为止。经常与REP 配合工作的字符串处理指令有MOVS、STOS 和LODS。 REPE/REPZ 判断计数寄存器的内容CX 是否为0 或ZF=0(即比较的两个操作数不等), 只要满足一个则重复执行结束,否则继续执行。可以与REPE/REPZ 配合工作的串指令有 CMPS 和SCAS。 REPNE/REPNZ 判断计数寄存器的内容是否为0 或ZF=1(即比较的两个操作数相等), 只要满足一个则重复执行结束,否则继续执行。可以与REPE/REPZ 配合工作的串指令有 CMPS 和SCAS。 3、字符串处理基本指令 (1)MOVS 传送指令 格式:MOVS DST,SRC 或MOVSB(传送字节)或MOVSW(传送字)。后面两种 形式需要与 REP 指令结合使用。 该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由 目的变址寄存器(DST)指向的附加段中的一个字(或字节)中去,同时,根据方向标志及 数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改。 (2)STOS 存入串指令 格式:STOS DST 或STOSB(存入字节)或STOSW(存入字)。 该指令把 AL 或AX 的内容存入由目的变址寄存器指向的附加段的某单元中,并根据方 向标志(DF)和数据类型修改目的变址寄存器的内容。
测试用例:V=50,X=72,Y=5,Z=30
CWD ADD CX,AX ADC BX,DX SUB CX,328 SBB BX,0 MOV AX,V CWD SUB CX,AX SBB DX,BX MOV AX,CX IDIV Y MOV AH,4CH INT 21H CODES ENDS END START
表 1 数据类型数据运算表 各指令的格式、功能及其对标志位的影响等细节知识,请同学们查阅相关书籍,这里不 再赘余。
四、实验内容与步骤
1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考 虑计算结果对标志寄存器中状态标志位的影响。 代码如下: 流程图:依次计算两组数的加减乘除,用 add,sub,mul,div 指令即可。
ASSUME
MOV AH,4CH
CS:CODES,DS:DATAS,SS:STACKS
INT 21H
START:
CODES ENDS
MOV AX,DATAS
END START
程序运行正常。
实验二 流程图和代码如下:
SATAS SEGMENT ary db 1,-6, -7,0 positive dw 0 negative dw 0 zero dw 0 DATAS ENDS
1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序; 2、熟练掌握宏汇编程序MASM 的使用; 3、熟练掌握连接程序LINK 的使用; 4、熟练掌握 DEBUG 的使用;
二、软硬件环境
1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识
mov ax,0
DATAS ENDS
mov bx,0
mov bx,1h
STACKS SEGMENT
addition:
sta dw 20 dup(?)
add ax,bx
top equ size sta
inc bx
STACKS ENDS
cmp bx,10
jae addition源自CODES SEGMENT
为正, positive++
为负; negative+
否 是否结束?
是
结束
MOV AH,4CH INT 21H CODES ENDS
END START
根据测试数据,则应有 1 个正数,1 个零,2 个负数。
为零; zero++
结果正确 换一个输入:
结果正确
实验二 算术运算类操作实验 (基础与设计)
ADDITION 后未打冒号,CMP 错打为 COM。修改原代码即可。
修改后的代码:
MOV DS,AX
DATAS SEGMENT
mov dx,offset msg
word1 DW 1,9078H
mov ah,9
byte1 db 21,'world'
int 21h
dd 12345678h
nop
msg db 'Hello everyone!$'
START: MOV AX,DATAS MOV DS,AX
mov si,0
mov cx,4 loop1: mov al,first[si] mov bl,second[si] add al,bl mov third[si],al inc si dec cx jnz loop1 MOV AH,4CH INT 21H
程序代码 如下:
DATAS SEGMENT V DW ? X DW ? Y DW ? Z DW ? DATAS ENDS CODES SEGMENT
ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV AX,X IMUL Y MOV CX,AX MOV BX,DX MOV AX,Z
程序代码如下: DATAS SEGMENT first DB 45H,82, 96H,57H second DB 12H,46H,83H,45H third db 4 dup(?) forth db 4 dup(?) DATAS ENDS
CODES SEGMENT ASSUME CS:CODES,DS:DATAS