微机原理-实验二-汇编程序1
- 格式:docx
- 大小:46.30 KB
- 文档页数:5
微机原理及汇编语言程序设计实验指导书计算机实验中心目录实验一D E B U G的使用 (3)实验二数制转换程序 (8)实验三数组排序程序 (10)实验四数据的输入与输出程序 (11)实验五子程序设计 (12)实验六宏调用程序设计 (14)实验一 DEBUG的使用【实验目的】1.学习使用DEBUG调试程序的各种命令。
2.掌握8088/8086指令系统---数据传送指令、算术指令。
3.掌握用DEBUG调试程序的方法。
4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。
5.掌握内存操作数及寻址方法。
6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。
7.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
8.掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。
【实验性质】验证性实验(学时数:2H)【实验内容】一、DEBUG 命令的使用1.敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。
2.用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
3.用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?4.用命令 F100 L0F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。
5.用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。
6.用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
7.用R命令将AX,BX内容改写为1234H及5678H。
8.用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH二、8088/8086常用指令练习1.传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,34MOV AL,56MOV CX,75ABXCHG AX,CX2)用U命令检查键入的程序,特别注意左边的机器码。
实验一汇编语言的编译、链接和调试一、实验目的1、学会使用masm对汇编源程序进行编译、链接、调试、运行。
2、掌握汇编语言的程序格式。
3、巩固所学的汇编语言指令。
二、实验环境1、硬件:PC 微机2、软件:宏汇编MASM 软件三、实验原理1、汇编语言程序的上机与处理过程2、汇编语言的程序格式(1)汇编程序一般由若干段组成,每个段都有一个名字,以SEGMENT作为段的开始,以ENDS作为段的结束,这两者前要冠以相同的名字作为段名。
(2)代码段和堆栈段必不可少,数据段和附加段可根据需要设置。
堆栈段的SEGMENT之后有关键字STACK。
代码段中有伪指令ASSUME告诉汇编程序,在各种指令执行时所要访问的各段寄存器将分别对应哪一段。
(3)源程序的每一段是由若干行汇编语句组成,每一行只有一条语句,且不能超过128个字符,但一条语句允许有后续行,最后均以回车结束。
(4)整个源程序必须以END语句结束,它通知汇编程序停止汇编。
四、实验内容进入DOS环境中相应的目录下。
如汇编软件的文件来为:D:\MASM,则对应的操作为(1)选择windows的“开始”→“程序”→“附件”→“命令提示符”(2)在DOS命令提示符下输入如下命令(其中带下划线部分为输入内容)。
C:\Documents and Settings\new>D:D:\>CD MASMD:\MASM>EDIT TEXT.ASM进入编辑程序,在其环境下输入编好的源程序,然后在盘上生成一个扩展名为.asm的文件。
程序示例DATA SEGMENTDA1 DB 10H,20H,30H,40HDA2 DB 0F0H,0B0H,0A0H,90HDA3 DB 00H,00H,00H,00HDATA ENDSSTACK1 SEGMENT PARA STACKDB 10 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV AL,[DA1]ADD AL,[DA2]MOV [DA3],ALMOV AL,[DA1+1]ADC AL,[DA2+1]MOV [DA3+1],ALMOV AL,[DA1+2]ADC AL,[DA2+2]MOV [DA3+2],ALMOV AL,[DA1+3]ADC AL,[DA2+3]MOV [DA3+3],ALCODE ENDSEND START3. 用宏汇编程序MASM,将扩展名为.ASM的源程序汇编成目标程序,即生成盘上扩展名为.OBJ的文件。
软件实验报告软件实验一一、实验目的1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;3.了解将十六进制数转换成ASCII值的方法。
二、实验原理用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。
三、实验内容及步骤1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的Memory Window,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。
在Address窗口输入X:8000H后回车,观察8000H-800FF起始的256个字节单元的内容。
2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开View菜单中的Memory Window,在Address 窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,观察外部RAM3000H和4000H中的内容。
3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。
4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。
5、添加求内部RAM 30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。
四、实验结果1.步骤1的结果为8000H-80FFH的内容都为1.2.步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。
第一节汇编程序的开发过程本节主要介绍了汇编语言源程序的编辑、汇编、连接的方法,DEBUG调试命令及其使用方法。
一、简介汇编语言源程序:用汇编语句编写的解决应用问题的程序。
汇编程序:将汇编语言源程序翻译成机器语言程序的系统。
汇编:将汇编语言程序翻译成机器语言程序的过程。
在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。
(1)编辑软件行编辑软件:全屏编辑软件:WPS、、、WORD、PE等。
当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。
(2)汇编程序有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。
TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。
(3)连接程序用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的机器代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。
(4)辅助工具程序(.EXE)进行汇编语言程序调试和文件格式转换的程序有: 动态调试程序EXE2BIN.EXE 文件格式转换程序CREF.EXE 交叉引用程序编辑、汇编、连接、调试过程如下图所示。
TD(turbo Debugger简称)也是动态调试程序,可在DOS和Windows环境下运行,用户界面十分友好。
二、汇编源程序用编辑软件建立的源程序.ASM文件,必须经过汇编才能产生.OBJ文件。
为此,需键入:C:>MASM <源文件名>↘或C:>MASM↘按前一种格式键入,屏幕上显示:Microsoft(R) Macro assemble Version 5.00Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reservedOBJ filename[<file>.obj]:Source listing[nul.lst]:Cross-reference[nul.crf]:以上信息中方括中为该项提示的缺省回答值,冒号后面等待用户输入信息,若不改变缺省值则直接按回车键。
《微机原理及汇编语言》实验指导书微机原理和汇编语言实验指导书信息与通信工程学院电气工程系目录实验须知 (3)实验一数据求和实验 (4)实验二循环与分支程序设计实验 (8)实验三中断程序设计实验 (12)实验四屏幕显示程序设计实验 (14)第一部分实验须知1、预习要求实验前认真阅读实验教程中有关内容,明确实验目的和实验任务。
每次实验前应有预习报告,未预习者不允许参加实验。
预习报告中:对软件实验,要求画出程序流程图,编好上机程序;对硬件实验,要求画出实验线路图,拟定实验步骤,画出程序流程图,编好上机程序。
2、实验要求实验是学习“微机原理及汇编语言程序”这门课程的重要环节,实验课请勿迟到,缺席。
爱护设备,保持清洁,不随意更换设备。
认真完成实验任务,实验结果经教师检查,教师对实验内容提问,对完成者做记录。
做硬件实验时,注意断电操作,即所有的接线、改线及拆线操作均应在不带电的状态下进行,严禁带电操作,并注意防止导线堵塞插孔。
发生事故,应立即切断电源,并马上向教师报告,检查原因,吸取教训。
实验完毕,请整理实验设备,再离开实验室。
3、报告要求每次实验后,应递交一份实验报告,报告中应包括下列内容:(1)实验名称、实验人姓名、学号、班级、所用的设备号。
(2)实验目的、任务。
(3)各任务程序流程图、程序清单(应加适量注释)。
(4)硬件实验应画出各任务的完整电路图,包括PC总线与实验用到芯片间全部电路。
(5)记录和分析实验结果。
(6)根据实验目的认真做小结。
第二部分实验实验一数据求和实验一、实验目的1、学习使用DEBUG程序的各种命令。
2、了解计算机取指令、执行指令特别是算术运算指令的工作过程。
3、掌握用DEBUG调试程序的方法。
二、实验内容1、参照教材中有关内容,掌握DEBUG程序的各种操作命令,重点为R——寄存器内容检查命令D——存储器内容检查命令A——汇编命令U——反汇编命令T——跟踪及单步执行命令P——单步执行命令,跳过子程序G——全速执行程序命令。
实验一汇编程序MASM的使用Microsoft公司提供了两种汇编程序版本,一种是全型版本宏汇编MASM;一种是小型版本ASM。
ASM的功能是MASM功能的一个子集,它不支持宏汇编、条件汇编等。
所以我们主要讲解MASM的使用。
一、实验环境1.为了对包括Pentium指令在内的汇编语言的源程序文件进行汇编,应有一台Pentium以上的计算机。
操作系统使用DOS5.0以上版本或windows操作系统命令提示符。
2.编辑程序可用EDIT、WPS、WORD等。
3.MASM 5.0以上宏汇编系统,包括:(1)MASM:汇编程序(2)LINK:连接程序(3)CREF:索引程序(4)LIB:库管理程序4.DEBUG调试程序说明:后面的内容假定在E盘上建立了MASM子目录,且上述程序都在该目录中或建立了相应路径。
二、汇编语言源程序上机操作过程用汇编语言编制程序,一般要经历如下步骤:1.编辑源文件用编辑程序EDIT或其它编辑程序建立源程序。
源程序文件必须以.ASM位扩展名存盘。
2.汇编源程序。
由编辑程序所建立的.ASM文件,只是个文本文件,计算机无法执行。
需要经过汇编程序的汇编,使其转为目标代码文件。
它是通过调用宏汇编MASM 程序完成这一汇编操作的汇编程序还将对原文件进行检查,如发现有错,将给出错误原因。
程序设计者可根据它分析和修改源程序,并再经过汇编,直到无误为止,此时得到的是一个目标文件(.OBJ)。
汇编源程序过程如下:先启动DOS,然后才进入汇编环境。
假设MASM系统(以MASM5.0为例)已预先装在硬盘的MASM子目录中。
下面均以E盘上操作为例进行说明。
假设事先用EDIT编辑程序编辑的源程序为EXAM1.ASM,则汇编过程如下:E:\MASM\masmMicrosoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985,1987.All rights reserved.Source filename[.ASM]:EXAM1.ASMSource listing [NUL.LST]:Cross-reference [NUL.CRF]:51698+417454 Bytes symbol space freeO Warning ErrorsO Severe Errors宏汇编程序被调入以后,先显示版本号。
实验一汇编语言上机环境及基本操作一、实验目地及要求1.学习及掌握汇编语言源程序地书写格式和要求,明确程序中各段地功能和相互之间地关系.2.学会使用EDIT、MASM、LINK、DEBUG等软件工具.3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序地方法.二、实验内容1.汇编语言源程序地建立本例中给出地程序是要求从内存中存放地10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中.设定源程序地文件名为ABC.DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSSTACK SEGMENT STACK ’STACK’STA D B 10 DUP(?)TOP E QU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕地显示状态如图1所示.图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改.2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序地主要功能有以下3点:(1)检查源程序中存在地语法错误,并给出错误信息.(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ.(3)若程序中使用了宏指令,则汇编程序将展开宏指令.源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示.图2 MASM宏汇编程序工作窗口汇编过程地错误分警告错误(Warning Errors)和严重错误(Severe Errors)两种.其中警告错误是指汇编程序认为地一般性错误;严重错误是指汇编程序认为无法进行正确汇编地错误,并给出错误地个数、错误地性质.这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止.3.用连接程序生成可执行程序文件经汇编以后产生地目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE).连接过程如图3所示.图3 LINK连接程序工作窗口上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示地错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止.连接以后,便可以产生可执行程序文件(.EXE文件).4.程序地执行当我们建立了正确地可执行文件以后,就可以直接在DOS状态下执行该程序.如:C:\>ABC本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行地结果.我们可以采用调试程序DEBUG来进行检查,相关内容请参见实验二.三、实例分析下面通过一个汇编语言源程序地实际例子,来了解汇编语言源程序地建立、汇编、连接、运行地完整过程.给出地程序是从键盘输入10个字符,然后以与键入相反地顺序将10个字符输出到显示屏幕上.设定源程序名为STR.ASM.1.用EDIT建立汇编语言源程序在DOS状态下,调用EDIT编辑程序建立文件名为STR.ASM地汇编源程序,如图4所示.图4 用EDIT建立汇编语言源程序2.用MASM汇编生成目标文件源程序文件建立完毕后,调用宏汇编程序MASM对STR.ASM进行汇编,如图5所示.图5 用MASM汇编生成目标文件3.用LINK进行连接生成可执行文件汇编完毕,程序正确,则可调用LINK进行连接,以生成可执行文件STR.EXE,连接过程如图6所示.图6 用LINK连接生成可执行文件4.程序地运行在DOS状态下,直接键入可执行地程序文件名STR,然后从键盘输入“0123456789”10个数字,输入回车键后,计算机将10个数字倒序排列输出,即“9876543210”.再次键入可执行地程序文件名STR,从键盘输入“abcdefghIj”10个字符,输入回车键后,计算机将10个字符倒序排列输出,即“jihgfedcba”.运行过程及其结果如图7所示.图7 程序地运行状态及结果参考程序:显示字符串data segmentmsg db 'hello world!',0dh,0ah,24hdata endsstack segment stack 'stack'db 16 dup('stack')stack endscode segmentassume cs:code,ds:data,ss:stackmain proc farstart: mov ax,data ;初始化数据段mov ds,axmov dx,offset msg ;字串首地址送DXmov ah,09h ;调用DOS系统功能int 21h ;显示字串mov ax,4c00h ;返回DOSint 21hmain endpcode endsend start实验2 分支程序地设计一、实验目地1)熟悉分支程序地编写.2)学习DOS系统功能调用(INT 21H/08H,AL=ASCII字符)从键盘接收单个字符地用法.3)掌握数据地输入与输出方法.二、实验内容1)用DOS系统功能调用INT 21H地08H功能接收键盘字符(AL=字符),若是 F,显示“This is the first word string.’,若是S,显示“This is the second word string.’,否则退出.2)设计一数据块间地搬移程序三、实验要求1)实验前准备好汇编语言源程序,阅读实验指导书关于调试方法与步骤地内容.2)实验要求在PC机上进行.四、编程提示1)用DOS系统功能调用INT 21H地09H功能显示字符串.2)用P命令执行程序,可看出结果.3)显示字符串参考程序data segmentstr1 db 'this is the first word string.','$'str2 db 'this is the second word string.','$'data endsstack segmentsta db 50 dup (?)top1 equ length stastack endscode segmentassume cs:code,ds:data,ss:stackmain proc farstart: push ds ;将DS入栈mov ax, 00h ;AX置零push ax ; 将0入栈mov ax, data ;初始化DSmov ds, axmov ah, 08h ;键盘输入一个字符int 21h ;字符在AL中cmp al, 'f'jz disp1cmp al, 's'jz disp2jmp dodisp1: mov dx, offset str1 ;显示字符串mov ah, 09hint 21hjmp dodisp2: mov dx, offset str2mov ah, 09hint 21hdo : mov ax, 4c00h ;返回DOS int 21hmain endpcode endsend start实验3 循环程序设计实验一、实验目地1)学习将一个十六位二进制数数转换成四位十六进制数显示地编程方法.2)熟悉循环程序地设计方法.1)学习乘法指令地用法.二、实验内容实现两个字节相乘地程序,并转换成十六进制数显示出结果.23H 20H=?三、实验要求1)分析题目,确定算法,画出程序框图.2)实验前准备好汇编语言源程序.3)实验要求在PC机上进行.四、编程提示1)两个数据放在数据段地DAT1和DAT2 中.2)计算结果转换成ASCII码显示,因此结果地高四位要拼成3,用INT 21H地02H功能(DL=显示字符)显示结果.3)参考程序DATA SEGMENTDAT1 DB 25H ; 25HDAT2 DB 30H ; 30HSUM1 DW ?,?SUM2 DB 10 DUP ('0')TABLE DB '0','1','2','3','4','5','6','7','8','9'DB 'A','B','C','D','E','F'DATA ENDSSTACK SEGMENTST1 DB 100 DUP ('SA')TOP1 EQU ST1 LENGTH ST1STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARSTART: MOV AX, DATA ;初始化数据段 MOV DS, AXMOV AX, STACK ;初始化堆栈段MOV SS, AXMOV AX, 100MOV SP, AXXOR AX, AXMOV BL, DAT1 ;取乘数MOV AL , DAT2 ;取被乘数MOV SI , OFFSET TABLE ;取ASCII码表首地址MOV DI , OFFSET SUM2 ;取结果地址MUL BLMOV SUM1, AX ;存乘积二进制结果; convert binary number in bx to hex 转换成16进制mov BX, AX ;结果送BXMOV CX, 4 ;转换4位数HEX16:PUSH CX ;保护CX MOV CL, 4 ;循环左移4位ROL BX, CLMOV AL, BLAND AL, 0FH ;保留低四位PUSH BX ;保护BXMOV BX, SI ;ASCII码表首地址送BXXLAT ;转换成ASCII码MOV [DI], AL ;存结果地ASCII码INC DI ;地址加一POP BX ;恢复BX中待转换地数POP CX ;弹出CX地计数值LOOP HEX16 ;未转换完,继续; display results on screenMOV AH, 02H ;调用DOS 地02H功能显示MOV CX, 04H ;显示数据地位数MOV DI, OFFSET SUM2 ;送出待显示数据地首地址DON2: MOV DL, [DI] ;显示数据送DL INT 21H ;显示INC DI ;显示数据所在存储单元加一LOOP DON2 ;未显示完,继续MOV AH, 4CH ;返回DOSINT 21HRETMAIN ENDPCODE ENDSEND START五、实验报告1)说明程序结构及功能.2)说明入口参数与出口参数,参数地输人与输出方法. 3)说明调试过程中遇到地问题及解决地方法.4)画出程序框图,打印源程序清单与执行结果.。
实验2 机器指令和汇编指令编程(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的变化。
机器码汇编指令b8 20 4e mov ax,4e20H05 16 14 add ax,1416Hbb 00 20 mov bx,2000H01 d8 add ax,bx89 c3 mov bx,ax提示:可以用E命令和A命令两种方式将指令写入内存。
注意用T命令执行时,CS:IP的指向。
a dddd:0000(定义在此地址下写入指令)(2)使用Debug,将下面的程序段写入内存,逐条执行,并根据逐条执行后的实际情况填空。
mov ax,ffffmov ds,axmov ax,2200mov sp,0100mov ax,[0] ;ax=______0000_____ add ax,[2] ;ax=_____0000______ mov bx,[4] ;bx=______0000_____ add bx,[6] ;bx=_____0000______ push ax ;sp=____ffee__;push bx ;sp=___ffee___;pop ax ;sp=___ffee____;ax=_____0000____ pop bx ;sp=___ffee____;ax=_____0000____ push [4] ;sp=___ffee___;push [6] ;sp=___ffee___;注:常用到的debug功能:D命令:查看内存中的内容;E命令:改写内存中的内容;U命令:将内存中的机器指令翻译成汇编指令;T命令:执行一条机器指令;A命令:以汇编指令的格式在内存中写入一条机器指令。
R命令:查看、改变CPU寄存器的内容;。
微机原理实验报告
班级:XXXXX
姓名:XXXX
学号:20XXXX
XXXXX大学
信息科学与技术学院
信息工程系
实验二汇编语言程序设计
一、实验目的:
1、熟悉MASM编译环境,了解程序的汇编方法;
2、熟悉常用汇编指令,学习汇编程序设计方法;
3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式。
二、实验内容:
1、将16进制数转换成ASCII码
2、求解:将程序数据段中0,1,2,...0Ah,0Bh,0Ch,0Dh,0Eh,0Fh的16个16进制数转换为对应的ASCII码,并存储在原码所在的相应地址中。
3、解答:取一个数,首先要判断该数是否大于等于10,若大于10则加上37H 转化为对应的ASCII码;若小于10则加上30H。
三、程序流程图和程序代码
1、流程图
2、代码与注释
data segment
buf db 0,1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh data ends
code segment
assume cs:code,ds:data;设置代码段cs,数据段ds start:mov ax,data;将数据存到ax中
mov ds,ax;转存到ds中
mov cx,16;将16赋给cx
lea si,buf;把buf的偏移地址赋给si
L2:mov al,[si]; 将si中数据移到al
cmp al,10; 将al中数据与10相比
jae L1;将16赋给cx
sub al,7h;如果大于10加7H
L1:add al,37h;反之加37
mov [si],al;把al转存到si
inc si;si si自加
loop L2;L2循环
mov ah,4ch
int 21h;回到dos系统
code ends
end start
四、调试过程及遇到的问题
1、程序执行截图
2、调试用到的命令
mount命令、link、masm、debug -u -t -d -g -q
3、遇到的问题及解决办法
一开始不知道怎么进行程序调试,在老师讲解了 -u -t -d -g命令的用法之后,对 -u -t -d -g用法有了认识,而后就解决问题.
五、思考题
1、总结无符号条件转移指令的功能,要求更改程序,用JA指令实现相同功能。
data segment
buf db 0,1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov cx,16
lea si,buf
L2:mov al,[si]e
cmp al,9
ja L1
sub al,7h
L1:add al,37h
mov [si],al
inc si
loop L2
mov ah,4ch
int 21h
code ends
end start
2、总结CMP指令和test指令的用法和区别。
cmp与sub类似,即从目的操作数减去源操作数,但sub会将运算结果送至目的操作数,而cmp不会送至目的操作数;test则与and类似,即将两个操作数进行按位“与”运算,但and将运算结果送至目的操作数,而test则不会。
cmp主要用于比较两数的关系,可以在有符号数和无符号数之间进行比较。
两数相等影响ZF标志,无符号数影响CF标志,有符号数影响SF和OF标志。
一般根据标志位的影响设置程序跳转,即根据不同的条件完成对应的程序片段,类似于高级语言的IF-ELSE结构。
所有的有条件转移指令都可以用在这条指令之后。
3、总结有符号数转移指令JG,JL功能,叙述该指令是如何使用标志位判断有符号数的大小的?
JE/JZ != 不跳转
JNZ/JNE == 不跳转
JG/JNLE <= 不跳转
JGE/JNL < 不跳转
JL/JNGE >= 不跳转
JLE/JNG > 不跳转
六、心得体会
这次试验主要是对一些基本的汇编实验有一些了解,对汇编代码用法有一些了解。
在试验之后,确实是了解了一些代码的用法,也了解了dos系统一些命令的用法,比如-u,-d,-g,-t -q等等,这次试验还是很有收获的。