实验4汇编实验
- 格式:doc
- 大小:189.50 KB
- 文档页数:13
汇编语言实验4详细讲解一、引言汇编语言是一种底层的计算机语言,它直接操作计算机的硬件。
在汇编语言实验4中,我们将深入了解汇编语言的一些重要概念和技巧。
本文将详细讲解汇编语言实验4的内容,帮助读者更好地理解和应用汇编语言。
二、实验目的汇编语言实验4的主要目的是学习和掌握在汇编语言中使用条件和循环结构的方法。
通过实验,我们将能够编写能够根据条件执行不同操作的程序,并实现循环执行一定次数的功能。
三、实验内容1. 条件结构条件结构是根据条件的真假来执行不同的操作。
在汇编语言中,我们可以使用条件跳转指令来实现条件结构。
条件跳转指令根据条件寄存器的值来决定是否跳转到指定的地址执行。
常用的条件跳转指令有JZ、JNZ、JC、JNC等。
2. 循环结构循环结构是重复执行一段代码的结构。
在汇编语言中,我们可以使用循环指令来实现循环结构。
循环指令根据计数器的值来判断是否继续执行循环体,并在每次循环结束后更新计数器的值。
常用的循环指令有LOOP、LOOPE、LOOPZ、LOOPNE、LOOPNZ等。
四、实验步骤1. 定义和初始化计数器在循环结构中,我们首先需要定义一个计数器,并对其进行初始化。
计数器可以使用DX寄存器或AX寄存器来保存。
2. 执行循环体在循环结构中,我们需要执行的代码放在循环体中。
循环体的代码将会被重复执行,直到计数器的值为0或满足其他条件。
3. 更新计数器的值在每次循环结束后,我们需要更新计数器的值。
可以使用INC或DEC指令对计数器进行加1或减1操作。
4. 判断是否继续执行循环在每次循环结束后,我们需要判断是否继续执行循环。
可以使用循环指令来实现此功能。
根据计数器的值或其他条件来判断是否继续执行循环。
五、实验示例下面是一个简单的实验示例,演示了如何使用条件和循环结构来实现一个简单的程序:```MOV CX, 10 ; 初始化计数器为10MOV AX, 0 ; 将AX寄存器清零LOOP_START:ADD AX, CX ; 将CX的值加到AX中LOOP LOOP_START ; 循环执行,直到CX的值为0MOV BX, AX ; 将AX的值保存到BX寄存器中```在上面的示例中,我们首先将CX寄存器初始化为10,然后将AX 寄存器清零。
合工大汇编实验报告本文将围绕“合工大汇编实验报告”展开阐述,按照实验的步骤分为以下几个部分进行讲解。
第一部分:实验目的和实验环境本次实验的目的是让我们熟悉汇编语言的基本语法和指令,了解在计算机内部运行程序的原理。
实验环境为Windows系统下的汇编语言编写工具MASM。
第二部分:实验过程在实验过程中,我们首先需要学会使用MASM编写汇编程序,然后通过“debug”命令进行调试,最后在汇编器中运行程序,观察程序的执行情况。
具体操作过程如下:1. 编写汇编程序首先,我们需要编写一份汇编程序。
在这份程序中,我们可以通过汇编语言的基本语法和指令,实现一些简单的计算、输出等操作。
例如,下面是一份简单的汇编程序:; 求1+2+3+...+10的结果mov ax, 0 ; 将ax寄存器清零mov bx, 1 ; 将bx寄存器初始化为1mov cx, 10 ; 将cx寄存器初始化为10sum_loop: ; 循环计算add ax, bx ; 将bx寄存器的值加到ax寄存器中inc bx ; 将bx寄存器的值加1loop sum_loop ; cx寄存器自减1,如果cx不为0则跳转到sum_loop处继续循环2. 调试程序当我们编写好程序之后,我们需要通过“debug”命令来进行调试操作。
在这个过程中,我们需要逐步执行汇编程序中的指令,并且观察寄存器和内存的变化情况,以检查程序是否正确。
3. 运行程序在完成程序的调试之后,我们可以通过汇编器来运行这份程序。
在运行的过程中,我们需要观察程序在计算机内部的执行情况,包括计算结果和输出结果等。
第三部分:实验收获通过这次实验,我们对汇编语言的基本语法和指令有了更深入的了解。
同时,我们也了解了在计算机内部执行程序的原理和过程。
这对于我们深入理解计算机的工作原理以及编写更高效的程序都有着重要的意义。
总之,本次实验为我们提供了一个很好的机会,让我们更深入地了解计算机系统的工作原理,同时也提高了我们的编程能力和实际应用能力。
汇编语言答案检测点1.1(第8页)(1)13(2)1024,0,1023(3)8192,1024(4)2^30,2^20,2^10(5)64,1,16,4(6)1,1,2,2,4(7)512,256(8)二进制注意:1.第4题中的符号'^'指求幂运算(如:2^30指2的30次方)检测点2.1(第18页)----------------------(1)写出每条汇编指令执行后相关寄存器中的值。
第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第十一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(第23页)----------------------(1)00010H,1000FH(2)1001H,2000H第2题说明:因为段的起始地址要为16的倍数。
所以当段地址小于1001H或大于2000H时CPU都无法寻到。
检测点2.3(第33页)答:CPU修改了4次IP的值。
第1次:执行完mov ax,bx后第2次:执行完sub ax,ax后第3次:读入jmp ax后第4次:执行完jmp ax后最后IP的值为0实验1查看CPU和内存,用机器指令和汇编指令编程(第33页)-----------------------------------------------------1.预备知识:Debug的使用<此部分略>2.实验任务(第43页)(1)<此部分略>(2)<此部分略>(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。
微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
河北工业大学城市学院《汇编语言程序设计》实验报告实验4 顺序结构程序设计一、实验目的1.掌握汇编语言集成开发环境下编写完整汇编程序的书写方法。
2.掌握汇编语言集成开发环境下汇编程序的汇编、连接、执行和调试。
3.常用伪指令的使用。
4. 掌握顺序结构程序的编写方法。
二、实验内容1.从键盘输入一个大写字母,将其转换为小写字母并显示在屏幕上解:程序代码为:DATAS SEGMENTDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV AH,1;功能号为1,键盘输入单字符并回显INT 21HADD AL,32MOV DL,ALMOV AH,2;功能号为2,显示输出单字符INT 21HMOV AH,4CHINT 21HCODES ENDSEND START运行结果如图所示:2.在内存X和Y单元各存放了一个非压缩BCD码,将它们组合为压缩BCD码并存于Z单元(高地址做高位)。
解:程序代码为:DATAS SEGMENTX DB 00000101BY DB 00000110BZ DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV CL,4SHL X,CLMOV CL,YOR CL,XMOV Z,ALMOV AH,4CHINT 21H CODES ENDSEND START运行结果如图所示:3.在内存TAB开始的16个单元连续存放了0-15的平方值(0-225),任给一个数X(0 ≤X ≤15),求X的平方值,并把结果存放在Y单元中。
解:程序代码为:DATAS SEGMENTTAB DB 0,1,4,9,16,25,36DB 49,64,81,100,121DB 144,169,196,225X DB 6Y DB? DATAS ENDS CODESSEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA BX,TABMOV AL,XMOV AH,0ADD BX,AXMOV AL,[BX]MOV Y,ALMOV AH,4CHINT 21H CODES ENDSEND START。
上海市各区2022届高三名校试题分类汇编化学〔实验探究4〕1、【上海市九校2022第二学期高三模拟】某研究性学习小组的同学为在实验室再现二氧化硫催化氧化的过程,并制取少量三氧化硫晶体,设计了如下列图的装置。
三氧化硫遇水生成硫酸并放出大量热,容易形成酸雾。
试答复:〔1〕6.4 g 二氧化硫被氧气氧化成气态三氧化硫,放出9.83 kJ 热量。
反响的热化学方程式为 ;〔2〕A 装置可用来观察二氧化硫和氧气的进气量。
实验时使A 中氧气导管冒出的气泡与二氧化硫导管冒出的气泡速率相近,其目的是_____________________________________,A 中的药品是 ;〔3〕检查完装置的气密性且参加药品后,开始进行实验。
此时首先应该进行的操作_______________________________________;〔4〕在实验过程中不能持续加热的理由是 ;〔5〕C 装置用来收集三氧化硫,其中冰盐水的作用是 ;〔6〕假设用a g 铜跟足量浓硫酸反响制二氧化硫,实验结束时得到b g 三氧化硫,该实验中二氧化硫的转化率为________________;〔7〕为了减轻实验对环境的污染,请你设计尾气处理装置,用简要文字答复:_______________________________________________________。
答案:〔12分〕〔1〕SO 2〔g 〕+21O 2〔g 〕→ SO 3〔g 〕+98.3kJ 或其他合理答案。
〔2分〕 〔2〕提高..二氧化硫的转化率...;浓H 2SO 4 〔2分,各1分〕 〔3〕给催化剂加热; 〔1分〕〔4〕防止温度过高,降低SO 2转化率...及催化剂活性..〔2分,答出一点得1分〕 〔5〕降温..,使SO 3凝结成晶体; 〔1分〕 〔6〕a 5b 4或a5b 4×100% 〔2分〕 〔7〕将尾气通入盛有浓硫酸的洗气瓶后再通入盛有氢氧化钠溶液的洗气瓶〔或通入盛有足量碱石灰的枯燥管等〕 〔2分〕〔只答通入氢氧化钠溶液不得分。
汇编语言程序设计实验指导【实验提要】以下列举的10个实验,都是以Intel的8086及后续系列微处理器的指令系统为核心,采用宏汇编工具MASM6. X以及调试工具DEBUG或DEBUG32,针对本教材所述内容进行相关的上机实践。
旨在帮助学生加深认识和理解理论教学知识,通过大量的上机实验熟悉8086 CPU的指令功能、用途和使用技巧,进而提高汇编语言程序设计的能力。
(带*号的为选作内容)实验一调试工具DEBUG的应用实验目的通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG的功能;2、DEBUG命令: A,D,E,F,H,R,T,U的使用;3、BCD码、ASCII码及用十六进制数表示二进制码的方法;4、寄存器: AX,BX,CX,DX,FLAGS,IP。
内容及步骤注:本次实验可以参照教材上关于DEBUG的叙述内容进行。
一、DEBUG 命令使用1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。
5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。
6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H (2)23H,45H (3)AB,3045H注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
高中化学无机物的性质实验汇编黑龙江鸡西市第一中学王维德一、氢元素单质及其化合物实验1:球形干燥管中装有碱石灰干燥剂。
导管口蘸些肥皂水,控制氢气流速,吹出肥皂泡。
当肥皂泡吹得足够大时,轻轻摆动导管,让肥皂泡脱离管口,观察现象。
现象与解释:肥皂泡迅速上升,说明氢气比同体积的空气轻。
实验2:在带尖嘴的导管口点燃纯净的氢气,观察火焰的颜色。
然后在火焰的上方罩一个冷而干燥的烧杯,过一会儿,观察烧杯壁上有什么现象发生。
现象与解释:纯净的氢气在空气中安静地燃烧,产生淡蓝色火焰。
用烧杯罩在火焰的上方时,烧杯壁上有水珠生成,接触烧杯的手能感到发烫。
氢气在空气里燃烧,实际上是氢气跟空气里的氧气发生了化合反应,生成了水并放出大量的热。
实验3:取一个一端开口,另一端钻有小孔的纸筒,用纸团堵住小孔,用向下排空气法收集氢气,使纸筒充满氢气。
移开氢气发生装置,拿掉堵小孔的纸团,用燃着的木条在小孔处点火,注意有什么现象发生。
现象与解释:刚点燃时,氢气安静地燃烧,过一会儿,突然发生爆炸,听到“砰”的声音。
点燃前,纸筒内是纯净的氢气,遇火燃烧。
随着氢气的消耗,空气不断从纸筒底部进入筒内,筒内的气体变成氢气和空气的混合物,这种混合气体遇火发生了爆炸。
实验4:在干燥的硬质试管底部铺一层黑色的CuO,管口微向下倾斜。
通入氢气,过一会儿,再给CuO加热。
反应完全后,继续通入氢气,直到试管冷却。
现象与解释:黑色的氧化铜逐渐变为亮红色固体,同时管口有水滴生成。
氢气还原氧化铜生成了铜和水。
二、碳族元素实验1:把石墨电极或铅笔芯和导线连在一起,接通电源后,灯泡是否发亮?现象与解释:灯泡发亮,说明石墨能导电。
实验2:参考右图所示装置,制一个净水器,并完成实验。
现象与解释:混有红墨水的水变为无色,说明木炭(活性炭)具有吸附性。
实验3:把木炭加热到发红,伸进盛有氧气的集气瓶里,注意木炭在空气里和在氧气里燃烧有什么不同。
燃烧停止后,立即向瓶内倒入一些澄清的石灰水,振荡,观察现象。
实验四串操作指令程序实验一、实验目的1. 熟悉五种串操作指令的功能,会编写常用的串操作应用程序。
2. 会使用DEBUG 命令查看串操作运行的结果。
二、实验环境1. 硬件:PC 微机2. 软件:Masm for Windows 汇编集成开发环境三、实验讲义串指连续存放在存储器中的一些数据字节、字或者双字。
串操作允许对程序连续存放的数据块进行操作。
这是唯一一种可以从存储器到存储器的指令。
源串一般存放在数据段,偏移地址由SI 指定;目标串必须在附加段,偏移地址由DI 指定。
在每次进行串操作后,SI 和DI 两个指针会自动修改。
修改的是增量方向还是减量方向由标志位DF 决定,DF=0 为增量操作,DF=1 为减量操作。
CX 中存放的是数据块的长度,可在CX 前加重复前缀标志,对串进行连续操作。
执行串指令之前,一般先进行如下操作:源串首地址(末地址)→ SI目的串首地址(末地址)→ DI串长度→ CX建立方向标志DF1. 重复前缀标志助记符判断条件说明REP CX 0 CX=CX-1,若CX 0 则重复REPE 或REPZ CX 0 且ZF=1 CX=CX-1,若CX 0 且ZF=1 则重复REPNE 或REPNZ CX=0 且ZF=0 EX=CX-1,若CX 0 且ZF=0 则重复2. 方向标志指令方向标志由标志位DF 决定,有CLD 和STD 两种指令。
CLD 将DF 置0,地址为增量操作。
STD 将DF 置1,地址为减量操作。
3. 串传送指令格式: [REP] MOVS DESTS, SRCS[REP] MOVSB/ MOVSW / MOVSD功能:将DS:SI 中的源串数据传送到ES:DI 规定的目的串单元中。
加重复前缀REP 可实现连续存放的数据块的传送。
例1:将源串中前三个字节的数据传送到目的串。
源串在数据段(DATAS)中,存放在SRC 单元中;目的串在附加数据段(EDATAS)中,存放在DEST 单元中。
汇编语言程序设计的实验环境及上机步骤一、实验环境汇编语言程序设计的实验环境如下:1.硬件环境微型计算机(Intel x86系列CPU)一台2.软件环境⏹Windows98/2000/XP操作系统⏹任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)⏹汇编程序(MASM.EXE或TASM.EXE)⏹连接程序(LINK.EXE或TLINK.EXE)⏹调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。
二、上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。
1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。
如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。
请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。
2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。
下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。
在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“ C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口,如图1所示。
图1 文本编辑器EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。
紧接着标题行下面的是菜单行,窗口最下面一行是提示行。
菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。
实验一汇编程序的汇编及运行1.实验目的和要求1、熟悉汇编程序的汇编、连接、执行过程2、生成LST文件,查看LST文件3、生成OBJ文件,修改语法错误4、生成EXE文件5、执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1、将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DATA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND2、输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DATA SEGMENTVAR1 DB 0, 25, ODH, 300VAR2 DB 12H, A4H, 6BHVAR3 DB ’ABCDEF’VAR4 DW 1234H, 5678HVAR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DATA BEING MOV AX, DATAMOV DS, AXLEA SI, VAR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, VAR1+2MOV [BX], [SI]MOV VAR5+4, VAR4MOV AH, 4CHINT 21HCODE ENDSEND START3、输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DATASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤(1)编写源程序。
实验四四字节十六进制数转十进制数一、实验目的进一步熟悉8086汇编指令,了解十六进制数转十进制数的方法。
二、实验内容从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,并在数码管上显示。
注意输入数据必须在00000000H ~05F00000H 范围,否则,结果超出8位十进制数,无法正确显示。
三、程序框图主程序四字节十六转十进制子程序四、实验步骤1、连线说明: 3、结果显示在F4区的数码管上五、程序清单.MODEL TINYEXTRN Display8:NEAR, GetKey:NEAR EXTRN F1:BYTE .STACK 100.DATABUFFER DB 8 DUP(?).CODESTART: MOV AX,@DATAMOV DS,AXMOV ES,AXNOPMOV F1,0 ;先清除显示,再接收键输入START1: LEA DI,BUFFERMOV CX,8 ;按键次数CALL GetKey ;得到4字节十六进制数MOV F1,1 ;接收到第一个键,才清除显示MOV SI,WORD PTR BUFFERMOV DI,WORD PTR BUFFER + 2CALL B4toD4 ;转换成十进制数LEA DI,BUFFER ;存放显示结果CALL B1toB2 ;低位MOV AL,AHCALL B1toB2MOV AL,BLCALL B1toB2MOV AL,BHCALL B1toB2LEA SI,BUFFER+7MOV CX,7CALL BlackDisplay ;将高位0消隐LEA SI,BUFFERCALL Display8JMP START1;将一个字节压缩BCD码转换成二个字节非压缩BCD码B1toB2 PROC NEARPUSH AXAND AL,0FHSTOSBPOP AXAND AL,0F0HROR AL,4STOSBRETB1toB2 ENDPBlackDisplay PROC NEARSTDMOV DI,SIBlackDisplay1: LODSB ;将高位0消隐CMP AL,0JNZ ExitMOV AL,10HSTOSBLOOP BlackDisplay1Exit: CLDRETBlackDisplay ENDP;四字节十六进制数转十进制数:DISI为十六进制,BXAX为压缩BCD码B4toD4 PROC NEARXOR AX,AXXOR BX,BXMOV CX,32B4toD4_1: RCL SI,1RCL DI,1ADC AL,ALDAAXCHG AL,AHADC AL,ALDAAXCHG AL,BLADC AL,ALDAAXCHG AL,BHADC AL,ALDAAXCHG AL,BHXCHG AL,BLXCHG AL,AHLOOP B4toD4_1RETB4toD4 ENDPEND START六、思考题如果不考虑在数码管上显示,不限制数据范围,程序应如何编写。
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
实验四数码管的动态显示实验班级通信1102 姓名谢剑辉学号20110803223 指导老师袁文澹一、实验目的熟悉掌握数码管动态显示的基本方法;根据已知电路和设计要求在实验板上实现数码管动态显示。
根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。
二、实验内容1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。
2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。
三、实验原理实验要求“4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容”。
动态扫描可以实现要求。
简单地说,动态扫描就是选通一位,送一位数据。
原理图中的P10~P13是位选信号,即选择哪个数码管显示数字;P00~P07是段码,即要显示的数字。
可以通过依次选通一位7段数码管并通过P0端口送出显示数据。
由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。
本实验使用中断,实现每2s更新一次数字。
四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。
(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。
由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。
汇编语⾔(王爽第三版)实验4[bx]和loop的使⽤实验4 [bx]和loop的使⽤1.编程:向内存0:200H~0:23fH依次传送数据0~63(3FH)程序分析:【1】内存0:200H~0:23fH空间与0020:0-0020:3f内存空间是⼀样的,(这个不会?oh!My God!,物理地址是唯⼀的,但逻辑地址组合是多种的。
)【2】因为偏移地址是连续内存单元;我们可以把偏移地址做下⽂章。
bx寄存器存储偏移地址(通过偏移地址的间接访问内存单元,这主要是写⼊的内存单元)。
dx寄存器作为存储中间变量的容器(源数据,常量0-63)来向内存写⼊。
汇编代码如下:assume cs:codecode segmentmov ax,0020Hmov ds,ax ;内存单元的段地址写⼊ds寄存器mov bx,0 ;bx寄存器存放偏移地址,初始化为0mov dx,0 ;dx寄存器存储常量数值0~63mov cx,40H ;这⾥40H==64,cx寄存器存放循环次数。
也可以为64;s: mov [bx],dx ;向[bx]内存单元写⼊dx值inc bx ;累加bxinc dx ;累加dxloop smov ax,4c00Hint 21Hcode endsend2. 向内存0:200H~0:23fH依次传送数据0~63(3FH),9条命令的程序的简化版本(不包括伪代码):程序分析:【1】内存0:200H~0:23fH空间与0020:0-0020:3f内存空间是⼀样的,(这个不会?oh!My God!,物理地址是唯⼀的,但逻辑地址组合是多种的。
)为什么这样?数据0-63是64个连续的数字,0-3fH也是连续的64个编号。
我们可以使⽤⼀个bx变量就把偏移地址和数字的递增都搞定了!修改后的汇编代码如下:assume cs:codecode segmentmov ax,0020Hmov ds,ax ;ds指向0020内存段mov bx,0 ;bx寄存器存放偏移地址,初始化为0,也当做源数据:常量数值mov cx,64 ;循环次数64s: mov [bx],bx ; 向[bx]内存单元写⼊bx数值inc bxloop smov ax,4c00Hint 21Hcode endsend实验体会:1. bx寄存器⼀般⽤作偏移地址的存储,[bx]也就代表了段地址与[bx]组合后指向的内存单元。
6.(2019·通辽)下图是初中化学的一些基本实验,请回答相关问题:(1)A实验是用烧杯罩住点燃的蜡烛,说明燃烧必须具备的条件之一是。
(2)B装置是电解水的实验,实验得出水由组成。
(3)C实验是蒸发食盐水的实验,蒸发时用玻璃棒不断搅拌的目的是。
(4)根据D实验中得出的二氧化碳的有关性质,可知二氧化碳可用于。
答案:(1)可燃物要接触氧气或空气(2)氢、氧两种元素(3)防止液体受热不均匀,造成液体飞溅(4)灭火【解题过程】(1)发生燃烧必须具备三个基本条件:①要有可燃物;②要有氧气或空气;③要有一定温度,即要达到可燃物质着火点;从图A实验是用烧杯罩住点燃的蜡烛是隔绝氧气而熄灭,放在外蜡烛还有燃,说明燃烧必须具备的条件之一是可燃物要接触氧气或空气。
(2)电解水实验是产生氢气和氧气,说明水由氢、氧两种元素组成。
(3)蒸发时,应用玻璃棒不断搅拌,以防液体受热不均匀,造成液体飞溅。
(4)从图D操作来看倾倒二氧化碳,说明二氧化碳密度比空气大,并看到蜡烛熄灭,则知二氧化碳可用于灭火。
26.(2019·云南)如图是实验室常用的部分实验装置,请按要求回答问题。
(4)下列实验的相关说法不正确的(填数字序号)①甲实验中,红磷要过量②乙实验中,水中的白磷没有燃烧,是因为白磷没有跟氧气充分接触③丙实验中,搅拌的目的是防止局部温度过高,造成液滴飞溅④丁实验开始时,先加热,后通入一氧化碳【答案】(4)④【解析】(4)①测定空气中氧气含量,红磷要过量;②由燃烧的条件,可燃物与氧气接触,温度达到着火点,乙实验中,水中的白磷没有燃烧,是因为白磷没有跟氧气充分接触;③蒸发操作中,搅拌的目的是防止局部温度过高,造成液滴飞溅;④一氧化碳还原氧化铁实验,要先通入一氧化碳,再加热,防止加热一氧化碳和空气的混合气体,爆炸。
26.(2019·齐齐哈尔)如图是初中化学教科书中的一些实验装置示意图。
回答下列问题:(1)A实验中,一段时间后可根据观察到的现象,得出铁生锈需要与氧气接触的结论;(2)B实验中,观察到薄铜片上的乒乓球碎片先燃烧,滤纸碎片后燃烧,可以说明燃烧条件之一是;(3)C实验可得到的结论是;(4)D实验中,向水中加少量硫酸钠或氢氧化钠的目的是。
数学与软件科学学院实验报告
学期:2017至 2018第 2 学期 2018年4月4日课程名称: 汇编语言专业:信息与计算科学班级: 2015级_5班实验编号:4实验项目:编写、调试具有多个段的程序
指导教师:冉茂华
姓名:黄玉含学号:2015060512实验成绩:
1、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。
assume cs: code, ds:data, ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
执行结果如下:
○1说明了cs=___076c_____,ss=____076b______,ds=_______076a_________
(1)、CPU执行程序,程序返回前,data段中的数据是多少?
还未执行时的数据:
执行程序后的数据:
○2不变,因为程序加载进去段内容就已经固定。
(2)、CPU执行程序,程序返回前,cs=___076c_____,ss=____076b______,ds=_______076a_________。
(3)、设程序加载后,code段的段地址为X,则data段的段地址为___X-2_____,stack段的段地址为____x-1______。
分析:程序段的段地址总是16的倍数且程序在内存中顺序加载。
2、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。
assume cs: code, ds:data, ss:stack
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
(1)、CPU执行程序,程序返回前,data段中的数据是多少?
○1返回前的data段中内容为0123h,0456h,说明在编译链接时data段已经加载进内存。
(2)、CPU执行程序,程序返回前,cs=____076c____,ss=___076B_______,ds=_________076a_______。
(3)、设程序加载后,code段的段地址为X,则data段的段地址为___x-2_____,stack段的段地址为___x-1_______。
(4)、对于如下定义的段:
name segment
......
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为((N-1)/16+1)*16。
分析:段在程序加载后实际占据的空间以16为单位。
3、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。
assume cs: code, ds:data, ss:stack
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
end start
(1)、CPU执行程序,程序返回前,data段中的数据是多少?01 23 04 56
(2)、CPU执行程序,程序返回前,cs=___076a_____,ss=_____076e_____,ds=_____076d___________。
(3)、设程序加载后,code段的段地址为X,则data段的段地址为__x+3______,stack段的
段地址为___x+4_______。
分析:程序按顺序执行。
4、如果将1、2、3题中的的最后一条伪指令“end start”改为“end”,则哪个程序仍然可以正确的执行?请说明原因。
答:第3题的程序,因为程序顺序执行。
分析:如果不指名start入口地址,并且使用end替换end start,程序仍可以执行。
因为如果不指名入口,程序则从加载进内存的第一个单元起开始执行,但因为程序中有部分是作为数据使用的,如果不指名入口,cpu会将数据当作汇编指令执行,所以一般要指明入口地址。
5、程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存在c段中。
assume cs: code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
?
code ends
end start
答:
代码如下:
assume cs: code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov ax,c
mov ds,ax
mov cx,8
mov bx,0
mov ax,a
mov es,ax
mov ax,b
mov ss,ax
s: mov al,es:[bx]
add al,ss:[bx]
mov [bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
6、编写code段中的代码,用push指令将a段中的前8个字型数据逆序存放到b段中。
assume cs: code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
?
code ends
end start
代码如下:
assume cs: code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h
mov cx,8
mov bx,0
s:push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h code ends
end start。