汇编程序调试实验报告
计算机组成原理与汇编实验报告

计算机组成原理与汇编实验报告姓名:学号:学院:信息科学与工程学院班级:实验1 存储器实验实验目的⏹掌握静态存储随机存储器RAM的工作特性⏹掌握静态存储随机存储器RAM的读写方法实验设备74LS273(一片),静态存储器MEMORY 6116(一片),与门(一片),与非门(一片),单脉冲(一片),开关若干,灯泡若干实验原理在微机系统中,常用的静态RAM 有6116、6264、62256 等。
在本实验中使用的是6116。
6116 为2K╳8 位的静态RAM,其逻辑图3.1如下:图3.1 6116逻辑图其中A0~10 为11 根地址线,I/O0~7 为8 根数据线,CS 为片选端,OE 为数据输出选通端,WR 为写信号端。
其工作方式见下表3-1:表3-1工作方式表实验所用的半导体静态存储器电路原理如图3.2 所示,实验中的静态存储器一片6116(2K×8)构成,其数据线接至数据总线,地址线由地址锁存器(74LS273)给出。
地址灯AD0—AD7 与地址线相连,显示地址线内容。
数据开关经一三态门(74LS245)连至数据总线,分时给出地址和数据。
图3.2 存储器实验原理图因地址寄存器为8 位,接入6116 的地址A7—A0,而高三位A8—A10 接地,所以其实际容量为256 字节。
6116 有三个控制线:CE(片选线)、OE(读线)、WE(写线)。
当片选有效(CE=0)时,OE=0时进行读操作,WE=0时进行写操作。
本实验中将OE 常接地,在此情况下,当CE=0、WE=0 时进行读操作,CE=0、WE=1 时进行写操作,其写时间与T3 脉冲宽度一致。
控制信号SW-B 为低电平有效,控制信号LDAR 为高电平有效。
实验步骤1. 选择实验设备:根据实验原理图,将所需要的组件从组件列表中拖到实验设计流程栏中。
搭建实验流程:将已选择的组件进行连线(鼠标从一个引脚的端点拖动到另一组件的引脚端,即完成连线)。
汇编代码.386将十进制按位转换成为二进制互相转化实验报告

汇编代码.386将十进制按位转换成为二进制互相转化实验报告全文共四篇示例,供您参考第一篇示例:引言汇编语言是一种底层的计算机语言,它直接面向计算机的硬件和指令集架构。
在计算机科学领域中,对汇编语言的理解和掌握是非常重要的,因为它可以帮助程序员更深入地理解计算机系统的工作原理。
本文将围绕着汇编语言中的十进制到二进制的转换,展开一项实验报告,通过编写汇编代码.386实现十进制和二进制的相互转换,并对实验结果进行分析和总结。
实验目的1. 了解汇编语言中的数据处理、位操作等基本概念和指令;2. 掌握利用汇编语言将十进制数字转换为二进制数,并将二进制数转换为十进制数的方法;3. 加深对计算机底层原理的理解,提高汇编语言编程能力。
实验过程1. 十进制转为二进制我们使用汇编语言编写代码,将给定的十进制数字转换为二进制数。
我们可以选择一个整数N作为输入,然后使用位操作指令将其转换为对应的二进制数。
在汇编语言中,可以使用移位操作来实现这一转换。
我们可以将整数N的每一位通过移位操作得到对应的二进制位,直到整个数转换完成。
2. 二进制转为十进制接下来,我们利用汇编语言编写代码,实现将给定的二进制数转换为十进制数的功能。
对于一个二进制数,我们可以通过相应的位操作和乘法操作将其转换为对应的十进制数。
具体来说,我们可以取得二进制数的每一位,并将其乘以相应位数的权值,然后求和得到十进制数。
实验结果在实验过程中,我们成功地编写了汇编代码.386来实现十进制和二进制的相互转换。
通过实际的测试和验证,我们得到了正确的转换结果。
这证明了我们的汇编代码在功能上是正确的,能够准确地进行十进制和二进制之间的转换。
实验总结通过这次实验,我们深入探讨了汇编语言中的数据处理和位操作等基本概念。
我们不仅了解了如何使用汇编语言进行十进制和二进制的转换,还加深了对计算机底层原理的理解。
我们也发现了汇编语言在实现这种功能上的高效性和灵活性。
结论本次实验通过汇编代码.386将十进制按位转换成为二进制,并实现了二进制到十进制的互相转化。
汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用一、实验目的1.熟悉汇编语言源程序书写格式。
2.熟悉汇编语言源程序编辑、汇编、连接、执行步骤。
3.练习DEBUG常用命令的使用。
4.熟悉8086的寄存器。
5.了解程序的执行过程。
二、实验预习要求1、认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。
2.预习使用DEBUG 检查/修改寄存器内容、查询存储器内容的命令。
3.预习使用DEBUG单步、断点及连续执行程序的命令。
三、实验内容1.编辑以下程序,汇编连接后运行,将输出'HOW ARE YOU?’。
本习题主要目的:熟悉汇编语言源程序的书写格式;熟悉汇编语言源程序的编辑、汇编、连接、运行。
DA TA SEGMENTBUF DB 'HOW ARE YOU?$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DEBUG 调试以下程序,查看DATA段中定义的数据在内存中的存放方式,并单步执行查看每一语句执行后相关寄存器的内容,并解释为何取该值:DA TA SEGMENT ;(1)DB 34H,12H ;(2)B DW 1234H ;(3)C DD 0 ;(4)D DB -1,15/3 ;(5)E DB '012' ;(6)F DW 'AB','C' ;(7)G DW ? ;(8)H DB 5 DUP(0) ;(9)I DW $-OFFSET H ;(10)DA TA ENDS ;(11)CODE SEGMENT ;(12)ASSUME CS:CODE,DS:DA TA ;(13)START: MOV AX,CODE ;(14)MOV DS,AX ;(15)MOV BX,SEG A ;(16)MOV CX,OFFSET B ;(17)MOV DX,TYPE C ;(18)MOV AH,4CH ;(19)INT 21H ;(20)CODE ENDS ;(21)END START ;(22)3.下面是第1题采用将主程序定义为远程的程序返回DOS的结束方式,将其编辑、连接、运行,熟悉汇编源程序不同的结束方式。
北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令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 :重复其后的串操作指令。
实验一Debug命令的使用

实验一Debug命令的使用实验一Debug命令的使用一、实验说明1、 DEBUG简介DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。
在汇编语言程序调试中很常用。
DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。
DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。
DEBUG命令的使用注意问题:(1)字母不分大小写(2)只使用十六进制数,但没有带后缀字母“H”(3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。
(4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。
2、 Debug的调入和退出以Windows环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态,如:C:\Documents and Settings\mjy>然后输入命令:>Debug进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。
退出Debug的命令:Q3、 Debug常用命令(1)汇编命令A,格式为:- A [地址]功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。
若不指定地址,则系统从默认的地址开始存放。
按回车键退出汇编状态应用:用于调试一条指令或几条指令组成的一个程序段。
(2)显示和修改寄存器命令R,格式为:- R [寄存器名]功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。
若未指定寄存器,则默认为显示所有寄存器的内容。
应用:常用于通过寄存器的值查看指令的执行结果。
(3)内存单元内容的命令E,格式为:- E 地址[内容表]功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。
汇编随机点名程序报告

《汇编语言程序设计》综合程序设计实验报告一、项目简介此项目名称是随机点名系统。
再具体点,就是一个上课老师提问时所用的随机点名系统。
随机按一下键盘,出来一个数,所对应的人来回答问问题,并设置结束时间。
到达这个结束时间时,会有闹铃提醒回答时间已经结束。
接着循环这样的过程。
它也可以应用于其他方面,比如限时赛等。
二、小组成员具体分工王洪叶写了一个一按键就随机出现一个十六进制数的程序,解凤娇写了一个设置闹铃时间并出声的程序。
写的差不多的时候,我们把这两个程序联系在一起,把界面整理了一下。
三、需求分析与设计随机数的产生是通过响应键盘按键,随机产生一个数然后将其转换为16进制数并输出。
我们班有32个人,需产生32个数字。
所有数除以32,得到的余数即为0~31之间的自然随机数。
对于时钟程序,需要截取系统时间,并每隔一秒刷新一次时间。
当时间到了的时候调用响铃子程序,就有声音提示。
程序中我们写了很多很多子程序,以及跳转的语句。
此项目的最大亮点是随机数和响铃的结合,很具有实用性。
四、代码及分析(列出代码,关键代码后必须要有注释;并写出自己组代码所用的知识点及特色)STACK SEGMENT STACKDW 256 DUP(?)STACK ENDSDATA SEGMENThour DW ? ;响铃时的小时数minute DW ? ;响铃时的分钟数ten DW 10AA DB 5 dup(?)str0 DB 0ah,0dh,0dh,'$'str24 DB 'The ringing time is: $'str25 DB 'The current time is: $'str26 DB 'Game Over !!!!!!! $'str27 DB 'Set time error!$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKRAND PROCpush dspush axxor ax,axSTIMOV AH,0INT 1AH ;读时钟计数器值到DX MOV AX,DXAND AH,3 ;清高6位MOV DL,32DIV DL ;除32,产生0~31余数MOV BL,AH ;余数存BX,作随机数MOV BH,00HCALL MCATPOP axPOP dsRETRAND ENDPMCAT PROC ;将随机数转换为16进制表示的ASCII码字符子程序PUSH AXPUSH bxPUSH CXPUSH DXCMP BX,9JA ss1 ;两位数跳转vn1:ADD BL,30H ;转换为ASCII码MOV AA,BLMOV AA+1,'$' ;存字符串送AALEA DX,AA ;字符串地址送DXMOV AH,9INT 21H ;输出ASCII码JMP ss3 ;小于9直接输出ss1:MOV CL,4 ;计数器置4MOV AL,0PUSH BX ;十进制BX进栈SHL BX,CL ;BX循环左移4位,高四位进BH,十位数CMP BH,9JBE V1 ;小于或等于9的ASCII码SUB BH,9ADD BH,40H ;A-F的ascii码JMP MM1V1:ADD BH,30HMM1:MOV AA,BH ;将ASCII码送AAPOP BX ;十进制BX出栈AND BL,0FH ;高四位清零,个位数vn2:CMP BL,9JBE TT1 ;0-9的ASCII码SUB BL,9ADD BL,40H ;A-F的ASCII码JMP RR1TT1:ADD BL,30H ;0-9的ASCII码RR1:MOV AA+1,BLMOV AA+2,'$' ;字符串结尾$ LEA DX,AAMOV AH,9INT 21H ;两位数输出ss3:POP DXPOP CXPOP BXPOP AXRETMCAT ENDPchansheng proc;随机数产生START PROC FARMOV BH,0MOV BL,7INT 10Hdisp macro mlea dx,mmov ah,9int 21hendmdisp str1disp str2disp str3disp str4disp str5disp str6disp str7disp str8disp str9disp str10disp str11disp str12disp str13disp str14disp str15disp str16disp str17disp str18disp str19disp str20disp str21disp str22disp str0KEY:SAHFMOV AH,0LAHFMOV AH,0HINT 16HJZ KEY;等于转移CALL RANDdisp str0START endpretchansheng endpcleanLine proc;用于清除一行的字符push axpush bxpush cxpush dxmov cx,85mov ah,2hmov dl,0dhint 21hclean:mov dl,' 'int 21hloop cleanmov dl,0dhint 21hpop dxpop cxpop bxpop axretcleanLine endpchangeline proc;用于显示一个回车换行push axpush cxpush dxmov ah,2hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop cxpop bxpop axretchangeline endpinputNegativeNumber proc;用于从键盘中接受一个十进制数,存到bx中push axpush cxpush dxmov bx,0mov cl,0mov ah,1int 21hcmp al,'-'je k4;等于转移k0:cmp al,30hjb k3;小于转移cmp al,39hja k3sub al,30hmov ah,0xchg ax,bxpush cxmov cx,10mul cx ;考虑溢出pop cxadd bx,ax ;考虑溢出k1:mov ah,1int 21hk4:mov cl,1jmp k1k3:cmp cl,1jne over;不等于时转移neg bx;求补over:pop dxpop cxpop axretinputNegativeNumber endp outputNumber proc;输出ax中的一个数字push axpush bxpush cxpush dxmov cx,0mov bx,10cmp ax,0jge p0push axmov ah,2hmov dl,'-'int 21hpop axneg axp0:mov dx,0div bxpush dxinc cxcmp ax,0jnz p0mov ah,2cmp cx,2jae p1mov dx,0inc cxp1:pop dxadd dx,30hint 21hloop p1pop dxpop cxpop bxpop axretoutputNumber endpsetRingTime proc;用于设置响铃时间push axpush bxpush cxpush dxmov bx,0h:mov ah,1hint 21hcmp al,30hjb wrongcmp al,32h;2ja wrongsub al,30h;0mov ah,0xchg ax,bxmul ten;乘add bx,axmov ah,1hint 21hcmp al,30hjb wrongcmp al,39h;9ja wrongsub al,30hmov ah,0xchg ax,bxmul tenadd bx,ax mov hour,bx mov ah,1hint 21hcmp al,':'jnz wrong mov bx,0m:mov ah,1hint 21hcmp al,30hjb wrongcmp al,36h jae wrongsub al,30h mov ah,0 xchg ax,bx mul tenadd bx,ax mov ah,1hint 21hcmp al,30hjb wrongcmp al,39hja wrongsub al,30h mov ah,0 xchg ax,bx mul tenadd bx,ax mov minute,bx jmp o wrong:call changeline call changeline mov ah,9hlea dx,str27int 21hmov ah,4chint 21ho:pop dxpop cxpop bxpop axretsetRingTime endpshowRingTime proc;用于显示响铃时间push axpush bxpush cxpush dxlea bx,hourmov ax,[bx]call outputNumbermov ah,2hmov dl,':'int 21hadd bx,2mov ax,[bx]call outputNumberpop dxpop cxpop bxpop axretshowRingTime endpgetTime proc;用于截取系统时间push axmov bx,0mov ah,2chint 21hmov al,chmov ah,0cmp ax,hourje e1g1:call outputNumbermov ah,2hmov dl,':'int 21hmov ah,0mov al,clcbwcmp minute,axje e2g2:call outputNumbermov ah,2hmov dl,':'int 21hmov ah,0mov al,dhcbwcall outputNumberjmp ede1:inc bxjmp g1e2:inc bxjmp g2ed:pop axretgetTime endpdelay proc;用于延时0.5秒push axwaiting:in al,61hand al,10hcmp al,ahje waitingmov ah,alloop waitingpop axretdelay endpaSecond proc;用于延时1秒push axpush bxpush dxmov bl,2back:mov cx,19144call delaydec bljnz backpop dxpop cxpop bxpop axretaSecond endpmain proc farMOV AX,DATAMOV DS,AXloop1:call chanshengpush dssub ax,axpush axmov ah,9hlea dx,str23int 21hcall setRingTimecall cleanLine;清除屏幕上光标所在这一行上的字符串,并把光标移动到行首mov ah,9hlea dx,str24int 21hcall showRingTime ;输出设置好的响铃时间call changelinecall changelinetime: ;用于每过一秒种刷新一次显示的时间mov ah,9hlea dx,str25int 21hcall getTimecmp bx,2 ;如果bx=2则已经到了设定的响铃时间call aSecondmov ah,2hmov dl,0dhint 21hjmp timering: ;响铃call changelinecall changelinecall changelinemov ah,9hlea dx,str26int 21hmov cx,40last:mov ah,2hmov dl,07hint 21hcall aSecondcall aSecondcall aSecondloop lastloop loop1retmain endpcode endsend main五、总结通过本次程序设计,我们都学到了很多东西,真正的将课本上的知识运用到实际生活中,这样更加增强了我们学习汇编语言的兴趣,在编写程序的过程中遇到了很多问题,但是通过运用网络和请教同学,最终将问题解决。
《嵌入式系统原理与应用》实验报告07-汇编指令实验2
《嵌入式系统原理与应用》实验报告实验序号:07 实验项目名称:汇编指令实验2学号X 姓名XXX 专业、班11计算机科学与技术实验地点实验楼1#416 指导教师XXX 实验时间2013-5-31 一、实验目的1.了解ADS 1.2 集成开发环境及ARMulator 软件仿真;2.掌握ARM7TDMI 汇编指令的用法,并能编写简单的汇编程序;3. 通过实验了解如何使用 ARM 汇编指令实现结构化程序编程。
二、实验设备(环境)及要求硬件:PC机;软件:PC机操作系统windows XP,ADS1.2集成开发环境。
三、实验内容与步骤实验内容:使用 ARM 汇编指令实现 if条件执行;使用 ARM 汇编指令实现 for循环结构;使用 ARM 汇编指令实现 while 循环结构;使用 ARM 汇编指令实现 do…while 循环结构;使用 ARM 汇编指令实现 switch 开关结构。
实验步骤:1. 思考如何使用 ARM 汇编指令实现结构化编程,具体的条件自己设定。
比如if条件执行,if(x>y) z=0,设 x 为 R0,y为 R1,z 为 R2,汇编代码如何编写。
2. 启动 ADS 1.2,使用 ARM Executable Image 工程模板建立一个工程Instruction5。
3. 建立汇编源文件 TEST2.S,编写实验程序,然后添加到工程中。
4. 编译连接工程,选择【Project】->【Debug】,启动 AXD进行软件仿真调试。
5. 打开寄存器窗口(Processor Registers),选择 Current 项监视各寄存器的值。
6. 单步运行程序,判断程序是否按设计的程序逻辑执行。
四、实验结果与数据处理(1)if(x>y) z=100;else z=50;设X为R0,Y为 R1,Z为 R2。
;文件名:for.sAREA EXP1,CODE,READONLY ;声明代码段EXP1ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START MOV R0,#20MOV R1,#10MOV R2,#0CMP R0,R1MOVHI R2,#100MOVLS R2,#50END(2)for(i=0; i<10; i++){x++;}设x为R0,i为R2 (i、x均为无符号整数);文件名:for1.sAREA EXP1,CODE,READONLY ;声明代码段EXP1 ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START MOV R0,#0MOV R2,#0LOOP CMP R2,#10ADDLS R0,R0,#1ADDLS R2,R2,#1BLS LOOPEND(3)while(x<=y){x *= 2;}设x为R0,y 为R1 (x、y 均为无符号整数);文件名:while.sAREA EXP1,CODE,READONLY ;声明代码段EXP1 ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START MOV R0,#5MOV R1,#10LOOP CMP R0,R1MOVLS R0,R0,LSL #1BLS LOOPEND(4)do{x--;} while(x>0);设x为R0 (x为无符号整数);文件名:ADD.sAREA EXP1,CODE,READONLY ;声明代码段EXP1ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START MOV R0,#5LOOP SUB R0,R0,#1CMP R0,#0SUBHI R0,R0,#1BNE LOOPEND(5); switch(key&0x0F); { case 0:; case 2:; case 3: x = key + y;; break;; case 5: x = key - y;; break;; case 7: x = key * y;; break;; default: x = 168;; break;; }; 设x为R0,y 为R1,key 为R2 (x、y、key 均为无符号整数) ;文件名:switch.sAREA EXP1,CODE,READONLY ;声明代码段EXP1ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START MOV R1,#3 ; 初始化y的值MOV R2,#2 ; 初始化key的值MOV R0,#0 ; 初始化x的值SWITCH AND R2,R2,#0x0F ; switch(key&0x0F)CASE_0 CMP R2,#0 ;case 0:CASE_2 CMPNE R2,#2 ; case 2:CASE_3 CMPNE R2,#3 ; case 3:BNE CASE_5ADD R0,R2,R1 ; x = key + yB SWITCH_END ; breakCASE_5 CMP R2,#5 ; case 5:BNE CASE_7SUB R0,R2,R1 ; x = key - yB SWITCH_END ; breakCASE_7 CMP R2,#7 ; case 7:BNE DEFAULTMUL R0,R2,R1 ;x = key * yB SWITCH_END ; breakDEFAULT MOV R0,#168 ; default: x = 168SWITCH_END NOPHALT B HALTEND五、分析与讨论没截图~switch这里研究了好久,一位运行结果出错了,结果它是从CASE_3这里执行完x = key + y再由B SWITCH_END ; break这个直接跳转出去~~六、教师评语成绩签名:日期:。
汇编语言学习知识程序设计实验
汇编语⾔学习知识程序设计实验⽬录⽬录 (1)实验⼀利⽤DEBUG熟悉常⽤指令的使⽤ (2)⼀、实验⽬的 (2)⼆、⽰例 (2)三、实验题 (2)实验⼆汇编程序和连接程序的使⽤ (6)⼀、实验⽬的。
(6)⼆、⽰例。
(6)三、实验题。
(8)实验三顺序结构程序设计 (11)⼀、实验⽬的 (11)⼆、⽰例 (11)三、实验题 (12)四、实验报告 (15)实验四循环结构程序设计 (16)⼀、实验⽬的 (16)⼆、⽰例 (16)三、实验题 (18)实验五分⽀结构程序设计 (21)⼀、实验⽬的 (21)⼆、⽰例 (21)三、实验题 (22)实验六⼦程序设计 (29)⼀、实验⽬的 (29)⼆、实验题 (29)实验⼀利⽤DEBUG熟悉常⽤指令的使⽤⼀、实验⽬的熟悉指令系统,掌握常⽤指令的⽤法;通过实验加深对各种寻址⽅式的理解;能熟练使⽤DEBUG中的命令对指令进⾏反汇编,观察并了解机器代码。
⼆、⽰例请分别⽤⼀条汇编语⾔指令完成如下功能:(过程略)。
1.⽤寄存器BX和SI的基址变址寻址⽅式把存储器的⼀个字节与AL寄存器的内容相加,并把结果送到AL中。
ADD AL,[BX][SI]2.⽤位移量为0520H的直接寻址⽅式把存储器中的⼀个字与3412H相加,并把结果送回该存储单元。
ADD WORF PTR [0520H],3412H三、实验题1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执⾏完后AX寄存器的内容。
要求输⼊指令,相应存储单元的内容要事先设置,单步P执⾏,观察执⾏结果。
(设置存储器的值)①.MOV AX,1200H②.MOV AX,BX③.MOV AX,[1200H]④.MOV AX,[BX]⑤.MOV AX,1100[BX]⑥.MOV AX,[BX][SI]⑦.MOV AX,1100[BX][SI]⑧ .MOV AX,[BP+SI+04]2、上机调试、验证教材习题3.15。
微机原理汇编语言的上机过程 实验报告
微机原理技术与接口实验报告学院:专业:班级:姓名:学号:汇编语言程序的上机过程实验目的通过简单地操作了解汇编语言程序的基本内容,体会汇编语言的运行,为以后的实验打下一定的基础。
实验原理及操作步骤一、上机环境❖要运行调试汇编语言程序,至少需要以下程序文件:▪编辑程序:或其他文本编辑工具软件,用于编辑源程序。
▪汇编程序:MASM.EXE,用于汇编源程序,得到目标程序。
▪连接程序:LINK.EXE,用于连接目标程序,得到可执行程序。
▪调试程序:DEBUG.EXE,用于调试可执行程序。
二、上机过程❖汇编语言程序上机操作包括:编辑、汇编、连接和调试几个阶段。
1.编辑源程序❖用文本编辑软件创建、编辑汇编源程序。
常用编辑工具有:、记事本、Word等。
❖无论采用何种编辑工具,生成的文件必须是纯文本文件,所有字符为半角,且文件扩展名为.asm(文件名不分大小写,由1~8个字符组成)。
2.汇编❖用汇编工具对上述源程序文件(.asm)进行汇编,产生目标文件(.obj)等文件。
❖汇编程序的主要功能是:检查源程序的语法,给出错误信息;产生目标程序文件;展开宏指令。
❖汇编过程如下:❖在DOS状态下,输入命令:MASM MYFILE.ASM(回车),即启动了汇编程序。
❖此命令执行后,会出现下面的3行信息,依次按回车键(即选择默认值)即可建立3个输出文件,其扩展名分别为:.OBJ(目标文件),.LST(列表文件)和.CRF(交叉引用文件)。
Object Filename [MYFILE.OBJ]:Source Listing [Nul.LST]:Cross Reference [Nul.CRF]:依次按回车键,进行选择后,汇编程序就对汇编源程序进行汇编。
如果汇编过程中发现有语法错误,则屏幕上会显示出错语言的位置和出错的类型。
此时,需要进行修改,然后再进行汇编。
❖如此进行,直至汇编无错误,得到目标文件为止。
3.连接❖汇编产生的目标文件(.obj)并不是可执行的程序,还要用连接程序把它转换为可执行的EXE文件。
汇编语言实验11
计算机科学系实验报告
一、实验目的:进一步掌握子程序的编写和调用
二、实验内容、程序清单及运行结果
题目:编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母。
;名称:letterc
;功能:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si指向字符串首地址
assume cs:code
data segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends
code segment
start:movax,data
movds,ax
mov si,0
callletterc
mov ax,4c00h
int 21h
letterc:mov cx,0
movcl,ds:[si]
jcxz ok
cmp cl,97
jb next
cmp cl,122
ja next
and cl,11011111b
mov ds:[si],cl
next:incsi
jmp short letterc
ok:ret
code ends
end start
三、实验结论、实验体会
小写字母[a,z]对应的ASCLL码的范围是[97,122],所以可以用cmp cl,97;jb next; cmp cl 122;ja next来判断字符是否为小写字母。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.微机原理与接口技术课程作业班级:目录一、实验目的: (4)二、实验环境 (4)三、实验过程 (4)(一)基础知识储备 (4)(二)汇编语言程序设计 (4)(三)汇编程序调试 (5)四、调试实例 (5)(一)实例一 (5)(二)实例二 (7)(三)实例三 (10)(四)实例四 (12)五、实验总结 (14)(一)实验收获 (14)(二)实验感悟 (15)一、实验目的:汇编语言是一种用助记符表示的程序设计语言。
用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O 接口驱动等程序设计。
通过本次实验,熟练掌握汇编程序的调试,深入了解MASM 汇编语言及其程序设计方法。
二、实验环境EDIT编辑器、MASM汇编程序、LINK连接程序、TD调试程序三、实验过程(一)基础知识储备1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。
2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。
3.了解MASM汇编语言及其程序设计方法。
掌握MASM汇编语言的语句格式、语法规则、常用伪指令及DOS功能的调用等。
了解顺序结构、分支结构、循环结构和子程序的设计方法。
(二)汇编语言程序设计1.分析问题,明确要解决的问题和要求。
2.确定解决问题的思路和方法。
3.将解决问题的方案编制成程序流程图。
4.根据流程图,逐条编写程序。
5.上机调试,验证程序是否正确。
(三)汇编程序调试MASM汇编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。
汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:1.编辑:使用编辑程序,将编写好的程序输入计算机,建立一个扩展名为ASM 的汇编语言源文件*.ASM。
2.汇编:使用汇编程序,将*.ASM文件经汇编后生成扩展名为*.OBJ。
3.连接:使用连接程序,把一个或多个目标程序连接成可执行文件*.EXE。
4.运行:运行可执行文件,验证程序是否正确。
5.调试:如果运行中有问题,可使用编辑或调试程序进行修改和调试,重复上述步骤,直到运行正确为止。
四、调试实例(一)实例一要求:编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。
实验思路:本例采用顺序结构和循环结构,合理利用堆栈,通过堆栈实现数据按照相反次序传送。
源程序:DATA SEGMENT ;数据段开始MBUF DB 0,1,2,3,4 ;每个数据分配一个存储单元NBUF DB 5 DUP(0) ;空5个存储单元备用DATA ENDS ;数据段结束STACK SEGMENT PARA STACK ;堆栈段开始,定位类型是PARADB 100 DUP(0)STACK ENDSCODE SEGMENT ;代码段开始ASSUME CS:CODE, DS:DATA,SS:STACK ;段分配伪指令START:MOV AX,DATA ;数据传送MOV DS,AX ;存储器数据传送到段寄存器中MOV SI,OFFSET MBUF ;取第一组操作数的偏移地址MOV DI,OFFSET NBUF ;取第二组操作数的偏移地址MOV CX,5 ;数据个数5传送到CX中LOP1:MOV AX,[SI] ;数据传送PUSH AX ;数据入栈INC SI ;指针加1LOOP LOP1 ;循环LOP2:POP AX ;数据出栈MOV [DI],AX ;数据传送INC DILOOP LOP2MOV AH,4CH ;终止进程INT 21HCODE ENDSEND START(二)实例二要求:编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数。
实验思路:本例中要求将正数和负数分开,因此应先判断数据块中数据的正负,然后将不同符号的数分别传送到两个缓冲区中,同时分别计数。
利用分支结构和循环结构解决问题。
源程序:DATA SEGMENT ;数据段BUF DB 5,2,7,-4,-2,-3,4,9,-6COUNT EQU $-BUF ;等值语句,COUNT等于BUF数据长度ZS DB ?FS DB ?STR1 EQU BUF+20 ;正数首地址STR2 EQU BUF+30 ;负数首地址DATA ENDSSTACK SEGMENT STACK ;堆栈段DB 100 DUP(0)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX ;初始化MOV BX,OFFSET BUF ;取BUF中操作数的偏移地址 MOV CX,COUNTMOV ZS,0MOV FS,0MOV SI,OFFSET STR1MOV DI,OFFSET STR2LOP:MOV AL,[BX]CMP AL,0 ;带符号数比较JG LOP1 ;数据大于0时跳转至LOP1 JL LOP2 ;数据小于0时跳转至LOP2 LOP1:INC ZS ;正数计数加1MOV [SI],AL ;正数数据存入SI寄存器中 INC BXINC SILOOP LOPJMP LASTLOP2:INC FSMOV [DI],AL ;负数数据存入DI中INC BXINC DILOOP LOPLAST:MOV DL,ZSMOV AH,06H ;显示字符INT 21HMOV DL,FSMOV AH,06HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START(三)实例三要求:编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数中找出绝对值最大的那个最大的数,将其存入MAX中。
源程序:DATA SEGMENTBLOCK DB 1,-1,2,-3,4,5,3,-1,2 ;设置数据COUNT EQU $-BLOCK ;置计数值MAX DB ? ;存最大值DATA ENDSSTACK SEGMENT STACKDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BLOCK ;数据首地址MOV MAX,0MOV CX,COUNT ;CX为计数器AGAIN:MOV AL,[SI] ;将第一个数据存在AL中 CMP AL,0 ;判断正负JS JDZ ;小于0转到JDZ LOP:CMP AL,MAX ;比较数据与最大值JG BIG ;AL大转到BIGJMP LOP1JDZ:NEG AL ;求补,即绝对值JMP LOP1 ;跳转至LOP1BIG:MOV MAX,ALJMP LOP1LOP1:INC SI ;指针加1,指向下一个数 DEC CX ;计数值减1MOV AH,MAX ;最大值存入AHJNZ AGAIN ;跳转至AGAINMOV AH,4CHINT 21HCODE ENDSEND START(四)实例四要求:编写程序,将内存中N个无符号数从大到小排序后输出显示。
源程序:DATA SEGMENTBUF DB 1H,9H,6H,15H,10HCOUNT EQU $-BUFDATA ENDSSTACK SEGMENT STACKDB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX ;初始化MOV CX,COUNT ;置计数器DEC CX ;外层循环减1LOP1:MOV SI,CXMOV DI,1 ;交换标志DI=1MOV BX,OFFSET BUF ;取数组中第一个偏移地址LOP2:MOV AL,[BX] ;第一个数据送到AL中 CMP AL,[BX+1] ;两数进行比较JAE LOP3 ;大于等于转到LOP3 XCHG AL,[BX+1] ;小于交换两数位置,AL 存大数MOV [BX],ALMOV DI,0 ;交换标志DI=0LOP3:INC BX ;数据指针指向下一位 LOOP LOP2 ;循环LOP2CMP DI,0 ;交换标志为0继续,交换标志为1结束JNZ OK ;不等于0转到OK,结束MOV CX,SILOOP LOP1 ;等于0循环LOP1OK:MOV CX,COUNTMOV BX,OFFSET BUF ;BX为BUF首地址的偏移地址LOP4:MOV DL,[BX] ;BX中的数放在DL中MOV AH,06H ;输出显示INT 21HINC BX ;指针指向下一字符LOOP LOP4 ;循环LOP4MOV AH,4CH ;结束进程INT 21H ;返回DOSCODE ENDSEND START五、实验总结本次实验,虽然花费时间较长,但通过实验的完成,我的收获也很多。
(一)实验收获无论是知识方面还是能力方面,本次实验都让我得到了很大提升。
知识方面,本次实验需要编写符合要求的程序。
首先要进行程序的设计,明确实验目的和设计思路,画出程序框图,然后进行程序的编写。
通过程序的设计与编写,使我能够更加深入的了解和掌握80486了指令系统。
程序编写完成后,便需要进行调试,最初编写的程序中出现了很多错误,在编译过程中发现错误后,不断进行修正,直到程序正确,可以实现所需功能。
在这一过程中,我逐渐熟悉了汇编程序编辑、编译、连接、调试的过程,并能通过这些软件的功能找到自己的错误加以改正,最终实现实验目的。
能力方面,由于系统原因,不能直接在电脑当前系统中进行汇编程序的调试,因此我安装了虚拟机,在虚拟机安装过程中遇到很多问题,通过对搜索引擎的有效利用,我解决了安装过程中的问题并成功安装了XP系统,建立了实验所需环境,为实验的完成打下基础。
本次实验,提高了我分析问题和解决问题的能力,能够通过查阅资料获得所需信息,解决实验过程中所遇到的各种问题。
(二)实验感悟本次实验对知识和能力的要求都比较高,开始完成实验室,遇到了很多阻碍,但通过资料的查找和优秀视频的参考,我逐渐找到问题的解决办法,最终实现了实现所需的功能,完成了这项任务。
在这一过程中,我更深刻地体会到,任何知识的学习和掌握都是时间和汗水的积累。
只有真正认真思考,坚定完成任务的信念,找到解决问题的办法,才能学会知识和技能。