实验二 指令 内存块移动
实验二数据传送(RAM-XRAM)

实验二数据传送(RAM–>XRAM)一、实验目的熟悉星研集成环境软件或熟悉Keil C51集成环境软件的使用方法。
熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。
二、实验内容1、熟悉星研集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。
2、编写程序,实现内外部数据段的传送、校验。
三、程序框图数据传送程序框图四、实验步骤在内部RAM 30H ~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM 的1000H ~100FH中的内容。
熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
五、程序清单;将内部RAM Address1 开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。
Address1 DATA 30HAddress2 XDATA 1000HORG 0000HLJMP STARORG 0100HSTAR: MOV SP,#60HSJMP $ ;传送正确STAR3: SJMP $ ;传送错误END如果读者使用星研集成环境软件,请考虑以下问题:1、运行程序前,打开变量窗、二个存贮器窗(一个选择片内数据;一个选择片外数据,起始地址选择1000H),每个存贮器窗有四个标签,有何好处?;2、使用单步进入命令,运行到第十四行后,运行过程中变量窗有何变化?将鼠标停留在A、SP、@R0、@DPTR上一秒后,出现什么?,它与变量窗使用场合的区别?3、将光标移到第十四行上,使用运行到光标处命令,观察运行结果,体会它与单步进入命令的不同处。
4、在二十行上,设置一个断点,使用全速断点命令运行几次,观察运行结果,它与运行到光标处命令有何区别?5、使用全速运行命令,稍后,点击工具条上停止运行命令按钮,当前执行箭头停在哪一行?运行结果是否正确?它与全速断点运行命令有何区别?6、观察寄存器,有哪几种方法?1)在工作区窗的通用寄存器标签视中;2)变量窗3)鼠标停留在寄存器上4)观察窗5)寄存器窗7、查看CPU内部数据RAM、CPU片外数据RAM:1)存贮器窗 2)变量窗3)鼠标停留在CPU内部数据RAM、CPU片外数据RAM的地址、@R0、@DPTR上六、思考题编写一个程序,将外部数据RAM中的数据传送到内部数据RAM中。
实验2 内存块移动

实验二内存块移动
一、实验目的
1.了解内存的移动方法。
2.加深对存储器读写的认识。
二、实验设备
1.伟福Lab6000增强型开放式通用实验/仿真系统;
2.计算机。
三、实验要求
将指定源地址和长度的存储块移到指定目标位置。
将片内RAM从20H单元开始的16个数据移动到片外2000H开头的16个单元中。
四、实验说明
块移动是计算机常用操作之一,多用于大量的数据复制和图象操作。
本程序是给出起始地址,用地址加一方法移动块,请思考给出块结束地址,用地址减一方法移动块的算法。
另外,若源块地址和目标块地址有重叠,该如何避免?
五、程序框图。
操作系统原理实验

操作系统原理实验一、实验目的本实验旨在通过实际操作,加深对操作系统原理的理解,掌握操作系统的基本功能和调度算法。
二、实验环境1. 操作系统:Windows 102. 虚拟机软件:VirtualBox3. 实验工具:C语言编译器(如gcc)、汇编语言编译器(如nasm)、调试器(如gdb)三、实验内容1. 实验一:进程管理在这个实验中,我们将学习如何创建和管理进程。
具体步骤如下:a) 创建一个C语言程序,实现一个简单的计算器功能。
该计算器能够进行基本的加减乘除运算。
b) 使用fork()系统调用创建一个子进程,并在子进程中执行计算器程序。
c) 使用wait()系统调用等待子进程的结束,并获取子进程的退出状态。
2. 实验二:内存管理在这个实验中,我们将学习如何进行内存管理。
具体步骤如下:a) 创建一个C语言程序,模拟内存分配和释放的过程。
该程序能够动态地分配和释放内存块。
b) 使用malloc()函数分配一块内存,并将其用于存储数据。
c) 使用free()函数释放已分配的内存块。
3. 实验三:文件系统在这个实验中,我们将学习如何进行文件系统的管理。
具体步骤如下:a) 创建一个C语言程序,实现一个简单的文件系统。
该文件系统能够进行文件的创建、读取、写入和删除操作。
b) 使用open()系统调用打开一个文件,并进行读取和写入操作。
c) 使用unlink()系统调用删除一个文件。
四、实验步骤1. 安装虚拟机软件VirtualBox,并创建一个虚拟机。
2. 在虚拟机中安装操作系统Windows 10。
3. 在Windows 10中安装C语言编译器、汇编语言编译器和调试器。
4. 根据实验内容,编写相应的C语言程序并保存。
5. 在命令行中使用gcc编译C语言程序,并生成可执行文件。
6. 运行可执行文件,观察程序的执行结果。
7. 根据实验要求,进行相应的操作和测试。
8. 完成实验后,整理实验报告,包括实验目的、实验环境、实验内容、实验步骤和实验结果等。
实验二 用机器指令和汇编指令编程

《汇编语言》实验报告
计算机科学系班实验日期 2014 年 09 月 29 日
姓名学号指导教师
一、实验目的
实验二用机器指令和汇编指令编程
二、实验环境
VM虚拟机,windows server 2003
三、实验内容及步骤
实验内容:
(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0]
add ax,[2]
mov bx,[4]
add bx,[6]
push ax push bx pop ax pop bx push [4] push [6]
(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生变化?
因为用T指令进行调试时,会产生中断。
而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。
实验报告2(内存块移动与数据排序)

课程名称:单片机原理与嵌入式系统
实验名称:内存块移动与数据排序
实验报告
班级
姓名学号
同组人姓名
实验日期年月日
实验目的
通过上机编、调程序,加强对ASM51汇编语言的学习,掌握内存块移动与数据排程序的编制。
对程序编制能力、程序排错能力进行训练。
实验内容
编程实现以下任务:
1.将外部数据存储器2000H~202FH 中的48字节数据移动到2030H~205FH中。
2.将内部RAM 20H~2FH中的数据加以排序,大数在前,小数在后。
三、实验设备
PC机.
Lab2000P单片机仿真实验系统
四、调试通过的软件清单:
内存块移动程序清单
数据排序程序清单
五、实验收获、总结
六、思考题
内部RAM数据块移动
数据排序小数在前,大数在后。
实验报告——指令、寄存器、内存单元

实验一、指令、寄存器、内存单元(实验一、汇编指令和机器代码)第一个程序一、启动debug程序鼠标单击“开始->程序->附件->命令提示符”,打开DOS(其实虚拟DOS)窗口,出现命令提示符Microsoft Windows [版本6.1.7600]版权所有(C) 2009 Microsoft Corporation。
保留所有权利。
.C:\users\lenovo>_键入debug并回车出现debug程序的提示符,一个短杆-二、汇编第一个程序-a10013DD:0100 mov dl,113DD:0102 mov ah,213DD:0104 int 2113DD:0106 int 2013DD:0108三、运行该程序-g☺Program terminated normally四、反汇编列出该程序-u100 1060AE9:0100 B201 MOV DL,01 0AE9:0102 B402 MOV AH,02 0AE9:0104 CD21 INT 210AE9:0106 CD20 INT 20五、查看寄存器的值-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=0100 NV UP EI PL NZ NA PO NC13DD:0100 B201 MOV DL,01六、用N命令对该程序命名-n 七、用W命令将该程序写入(Write)磁盘中-rbxBX 0000:-rcxCX 0000:8-wWriting 00008 bytes八、退出debug-qC:\users\lenovo>九、用DOS的dir命令查看当前目录下的文件C:\users\lenovo>dir十、在DOS下直接运行该程序,输入smile并回车C:\users\lenovo >smile☺C:\users\lenovo >第二个程序——可以将所有ASCII码显示出来的程序一、打开debugC:\users\lenovo >debug二、汇编-a1000AE9:0100 mov cx,01000AE9:0103 mov dl,000AE9:0105 mov ah,020AE9:0107 int 210AE9:0109 inc dl0AE9:010B loop 01050AE9:010D int 200AE9:010F三、执行-g☺☻♥♦♣♫☼►◄↕‼¶§▬↖↑↓→←∟↔▲▼!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣζµηΦΘΩδ∞θε∩≡±≥≤⌠⌡÷≈°··√ⁿ²■Program terminated normally-第三个程序——显示字符串,如:UNDERSTAND?一、打开debug,汇编程序C:\users\lenovo >debug-a1000AE9:0100 mov dx,1090AE9:0103 mov ah,90AE9:0105 int 210AE9:0107 int 200AE9:0109 db 'understand?$'0AE9:0115二、定义文件长度,命名文件,存盘,执行-r bxBX 0000:-r cxCX 0000:15-n -wWriting 00015 bytes-gunderstand?Program terminated normally-三、查看DB伪指令将那些内容放入内存-d1000AE9:0100 BA 09 01 B4 09 CD 21 CD-20 75 6E 64 65 72 73 74 ......!. underst 0AE9:0110 61 6E 64 3F 24 23 33 D2-87 D1 B8 01 34 00 D8 0A and?$#3.....4... 0AE9:0120 DF 99 89 16 E1 99 80 3E-C5 96 00 74 9C B4 40 CD .......>...t..@.0AE9:0130 21 72 5F C6 06 E3 99 1A-C3 E8 FF 0F FE 06 D2 96 !r_.............0AE9:0140 80 3E D1 96 00 74 48 8B-1E 13 99 83 FB 00 7E 33 .>...tH.......~3 0AE9:0150 8B 0E E1 99 8B 16 DF 99-8B C1 0B C2 74 21 B8 00 ............t!..0AE9:0160 42 CD 21 33 C9 B4 40 CD-21 80 3E E3 99 00 74 08 B.!3..@.!.>...t. 0AE9:0170 41 BA E3 99 B4 40 CD 21-B4 3E CD 21 E9 6A FA B4 A....@.!.>.!.j..-第四个程序——键盘输入任意字符串,然后显示出来一、打开debug,汇编程序C:\users\lenovo >debug-a1000AE9:0100 mov dx,01160AE9:0103 mov ah,0a0AE9:0105 int 210AE9:0107 mov dl,0a0AE9:0109 mov ah,020AE9:010B int 210AE9:010D mov dx,01180AE9:0110 mov ah,090AE9:0112 int 210AE9:0114 int 200AE9:0116 db 200AE9:0117二、执行-gabcd$abcdProgram terminated normally三、再执行-ghow are you?$how are you?Program terminated normally -。
块命令的实验报告

块命令的实验报告第一次上机时,我们都很兴奋,终于可以玩点真格的了。
老师带着我们进入一个新环境,输入代码后,出现一段窗口说这就是“ DOS”,然后把我们全班带到另外一个屏幕,老师用同样的办法给我们做演示,那个操作界面跟老师教学课本里画得完全不一样啊!老师也解释不清楚,只能用一种办法——带领大家按键盘打字。
因为还没有键盘,所以老师边讲解边手把手地教我们怎么打,我们就模仿着老师的动作练习起来。
实验目的:研究复杂操作系统中的块命令与语言指令之间的关系实验过程:首先编写好一个简单的程序“0101”和一些辅助数据;接下来是实验的重头戏——调试。
当老师问谁想试试时,全班几乎异口同声地回答:“我!”原来,他们早已跃跃欲试了,虽然不知道老师要干什么,但却迫切希望亲自体会一番。
于是,老师便开始让我们实践了。
我心想,如果成功了,那将是多么神奇的事情呀!老师把调试工具交给我,并告诉我这个工具叫“ VHDL”。
我小心翼翼地握住鼠标左键,轻轻地移动右键,然后松开左键……咦?没反应?难道是坏了吗?我急忙检查电脑的其它部件,发现主板、显卡等硬件运行正常,便再次尝试着操纵“VHDL”工具。
这次,我的手又碰到了鼠标左键,看来,成功的曙光又向我招手了。
实验结果及分析:块是命令在计算机中存放信息的临时组合方式,每条命令由一个块组成。
在计算机中,对于某个命令来说,它可能属于一个程序或者一个子程序,甚至是一个过程。
但无论哪种形式,块必须包含一个或多个程序的最基本信息。
块命令是由一个或多个块组成的命令,它通常被嵌套在一个或多个过程内执行。
块命令在不同的操作系统中表现各不相同,比较典型的有: BASIC 语言中的变量, C 语言中的函数, Fortran 语言中的循环体,汇编语言中的过程。
块命令一般占一个字节的空间,它既不是指令,也不是程序,而是一个信息的容器,里面存储着该命令所处理的信息。
实验二内存操作数及寻址方法

实验二内存操作数及寻址方法在计算机科学领域中,内存操作数是指指令中涉及到的内存位置的操作数。
内存操作数是计算机程序中的重要组成部分,它们用于存储和访问程序执行所需的数据。
内存寻址是指确定内存中具体位置的过程。
内存寻址方法是指通过其中一种规则或算法来确定内存中的特定位置。
内存操作数和寻址方法对于计算机的运行和性能非常重要。
了解不同的内存操作数和寻址方法可以帮助程序员更好地理解计算机的底层工作原理,并且有助于优化程序的性能。
在计算机中,内存是用来存储数据的重要组成部分。
在程序执行过程中,需要使用内存来存储和访问数据。
内存操作数是指指令中涉及到的内存位置的操作数。
计算机通过内存操作数来指示需要访问的数据在内存中的位置。
内存操作数可以是直接操作数或间接操作数。
直接操作数是指指令中明确指定的内存位置。
例如,指令MOVAX,[0x1000]将0x1000位置的数据移动到寄存器AX中,0x1000就是直接操作数。
间接操作数是通过寄存器间接访问的内存位置。
例如,指令MOVAX,[BX]将BX寄存器中的值作为内存地址,并将该地址中的数据移动到寄存器AX中,BX就是间接操作数。
了解内存操作数对于程序员来说非常重要。
通过选择合适的内存操作数,程序员可以更好地控制内存访问和数据存储,从而提高程序的执行效率。
内存寻址是确定内存中具体位置的过程。
内存寻址方法是通过其中一种规则或算法来确定内存中的特定位置。
常见的内存寻址方法包括直接寻址、间接寻址、相对寻址和寄存器寻址。
直接寻址是最简单的寻址方法,它直接使用指令中给定的内存地址。
例如,指令MOVAX,[0x1000]使用直接寻址方式将0x1000地址中的数据移动到AX寄存器中。
间接寻址是通过寄存器间接访问的寻址方法。
例如,指令MOVAX,[BX]使用间接寻址方式将BX寄存器中的值作为内存地址,并将该地址中的数据移动到AX寄存器中。
相对寻址是通过指令中的偏移量进行寻址的方法。
例如,指令JMPSHORT0x100将程序跳转到相对地址0x100处。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五内存块移动
一、实验目的:
1、了解内存块的移动方法;
2、加深对存储器读写的认识。
二、实验设备:
电脑和THGZ-1单片机.CPLD/FPGA综合开发实验装置
三、实验说明:
块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。
本程序是给出起、始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。
块首地址3000H 和4000H,块长度256 字节。
四、实验内容及步骤:
1、推上左侧空气开关;
2、启动计算机,打开伟福仿真软件 Keil Uvsion2,进入仿真环境,
⑴、建立工程项目:
点击主菜单 PROJEKT→NEW PROJECT→工程名 XXX.UV2(保存在桌面上)
⑵、进行仿真器的设置:
打开 View →PROJECT WINDOW 界面,右键点击TARGET1 选择 OPTION FOR TARGET TARGET1
a、CPU选择:
DEVICE → ATMEL → AT89C51
STANDARD 8051 STARTUP CODE……? 否
b、目标机晶振选择:
TARGET → XTAL → 11.0592 MHZ
c、调试选项:
DEBUG →⊙USE SIMULATOR
⑶、创建程序文件:
FILE→NEW FILE→
在 TEXT 文本界面输入源程序
ORG 0000H
.
END
输入完毕,另存文件 SAVE AS : XXX.ASM(保存在桌面上)
⑷、添加程序到工程组:
点开TARGET1→SOURCE GROUP ,右键→ADD FILES TO GROUP “SOURCE GROUP1”
在文件类型窗口选择: ALL FILES
在文件名窗口输入要调试的程序文件的路径和名称 : 桌面上的 XXX.ASM,
点击“ADD”键,并关闭此窗口
⑸、查看源程序:
双击 SOURCE GROUP 下的文件名(SOURCE GROUP下只允许一个文件,其他用 REMOVE FILE FROM SOURCE GROUP 删去)打开XXX.ASM 源程序,阅读、理解、分析该程序。
⑹、编译,连接:
点击项目菜单,选择全部编译,连接,编译、连接有误回到步骤⑶,打开文件修改直至编译,连接完全正确。
⑺、调试运行程序:
点击 DEBUG →DEBUG START 后,点击全速执行快捷按钮,点击暂停按钮,观察存储块数据变化情况。
点击DEBUG →DEBUG HALT 后,点“RST”复位,可开始再次运行程序。
⑻、查看结果:
打开 VIEW 下的 MEMORY WINDOW,选择外部数据存储器窗口用 X: ????H ,选择内部数据存储器窗口用 D: ??H, 拖动DATA 窗口的滚动条,使所选地址出现在窗口上,观察字节单
元的内容,可右键点击某单元内容,选择 MODIFY MEMORY AT X:??????? , 用键盘输入新
的值。
再次运行程序,观察块数据变化情况
打开数据窗口(XDATA) ,观察地址3000H 起始256 个字节存储块和4000H 起始的256 个字节存储块,若各单元内数据对应相同,则用键盘输入改变其中一块的数据,全速运行程序。
点击暂停按钮,观察两个存储块的数据,可以看到两块数据已相同,说明存储块已移动。
打开CPU 窗口,选择单步或跟踪执行方式运行程序,观察CPU 窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
3、运行结束,关闭程序,关闭Keil软件,关闭电脑,断开空开。
五、流程图及源程序
1、源程序:
移动 3000H --> 4000H, 256 字节
ORG 0000h
mov r0, #30h
mov r1, #00h
mov r2, #40h
mov r3, #00h
mov r7, #00h
Loop: mov dph, r0
mov dpl, r1
movx a, @dptr
mov dph, r2
mov dpl, r3
movx @dptr, a
cjne r1, #0ffh, Goon1
inc r0
Goon1: inc r1
cjne r3, #0ffh, Goon2
inc r2
Goon2: inc r3
djnz r7, Loop
Sjmp $
End
2、流程图:
六、思考题:
1、若源块地址和目标块地址有重叠,该如何避免?
2、请思考给出块结束地址。
3、用地址减一方法移动块的算法。