《汇编语言》实验报告实验四

合集下载

汇编语言实验4详细讲解

汇编语言实验4详细讲解

汇编语言实验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 寄存器清零。

汇编语言程序设计实验报告四(算术运算程序实验)

汇编语言程序设计实验报告四(算术运算程序实验)

汇编语言程序设计实验报告四(算术运算程序实验)汇编语言程序设计实验报告四(算术运算程序实验)一、实验目的1、熟悉算术运算指令的功能与应用。

2、学习编写加法和乘法运算程序。

二、实验内容1、二进制运算计算23579+7684和0A5H+34H(1)原始数据分别存于A、B、C、D开始听内存单元中,运算结果分别存E、G开始的内存单元中。

(低位数在低字节中)(2)前两个数据在程序中用十进制表示,后两个数据在程序中用十六进制表示。

(3)十进制数定义成字变量,用16位加法。

十六进制数定义成字节变量,用8位加法。

2、多字节加法在内存中以FIRST和SECOND开始的单元中分别存放有两个10位压缩型十进制数(BCD 码),低位在前。

求这两个数的压缩十进制数和,并存到THIRD 开始的单元中。

(1)压缩十进制数亦称组合十进制数,一个字节存放二位BCD 码。

(2)两个加数可直接直接在程序中设置。

3、二进制乖法(1)在内存DATA1和DA TA2单元中分别存放着两个8位无符号二进制数A和B 。

求AXB,结果存于DATA3开始的内存单元中。

(2)在FIRST和SECOND开始的内存单元中,分别存放着两个16位带符号二进制数D和E,求DXE,结果存于THIRD开始的内存单元中。

三、实验准备1、仔细阅读本实验教材。

2、认真预习加法、乖法和十进制调整指令。

精心设计运算使用的实验数据。

(注意:应准备多组不同数据以备实验。

)3、根据实验内容,分别画出各个程序的流程图,并在实验前编好各个源程序。

四、实验步骤1、二进制数运算(1)题目的具体要求,将原始数据及存放结果的内存单元分别定义成字变量或字节变量。

(2)辑程序,把编写好的源程序建立为汇编语言源程序文件并存盘。

(3)对源程序文件进行汇编、连接,且修改至无错误,然后运行程序。

(4)利用调试程序观察运行结果。

如果有错,分析并找出错误原因,改写程序并重新调试。

2、多字节加法程序(1)在FIRST 和SECOND开始的内存单元中建立各为10位的压缩型BCD码的数据区,数据要选择得当。

汇编语言实验报告1~7

汇编语言实验报告1~7

汇编语言实验报告1~7实验一:数据传输指令、算术指令、逻辑指令的使用实验内容:利用汇编语言,编写一个程序,实现两个整数相加,并将结果存入第三个变量中实验步骤:1. 声明三个变量a、b、c2. 将10存入a,将20存入b3. 将a的值传入al,将b的值传入bl4. 使用add指令将al和bl相加,将结果存入al5. 将al的值传入c6. 显示c的值实验结果:a db 10mov al,aadd al,blint 21hmov ax,4c00h实验二:分支指令的使用实验内容:利用汇编语言,编写一个程序,实现当输入的值为正数时,输出"I'm positive!";当输入的值为负数时,输出"I'm negative!";当输入的值为零时,输出"I'm zero!"1. 定义一个变量num2. 接收用户输入,并将其存储在num中3. 用test指令判断num的值4. 当num=0时,执行输出"I'm zero!"的指令7. 退出程序num db ?lea dx, promptsub al, '0'test num, numjz zerojs negjmp positiveneg:output:zero_msg db 'I am zero!$'prompt db 'Please enter a number:', 0dh, 0ah, '$'1. 定义变量i、sum,分别表示累加的数字和累加和2. 将i赋初值1,sum赋初值03. 进入循环5. 使用inc指令将i加16. 使用cmp指令将i与10比较,如果i小于等于10,继续循环,否则退出循环7. 输出结果mov bx, iloopStart:inc bx实验四:过程调用的使用2. 循环遍历1到100之间的每个数3. 用一个for语句嵌套一个for语句判断该数是否为质数4. 用两个自定义的子程序is_prime和output输出结果call is_primeskip:cmp i, 100prime_loop:div blretje newlinejmp done实验目的:掌握字符串操作指令的使用实验内容:利用汇编语言,编写一个程序,将字符串"SJTU"改为字符串"MIT"1. 定义字符串SJTU和MIT2. 定义两个变量i和len,分别表示字符串的下标和长度3. 使用movsb将SJTU的值传到MIT中4. 输出MITSJTU db 'SJTU'lea si, SJTUstringLoop:实验内容:利用汇编语言,编写一个程序,实现将输入的字符串写入一个文件中,然后再读取该文件中的字符串并输出2. 打开文件3. 将字符串写入文件中4. 关闭文件6. 读取文件内容8. 输出读取的字符串fileName db 'test.txt'content db 32 dup(?)mov cx, word ptr [content]实验内容:利用汇编语言,编写一个程序,在系统按下Ctrl+C时,输出一条信息并退出1. 声明函数handleCtrlC2. 获取中断21的地址,将其存储到文件头中org 100hmov [old_int_21h], es:bxmov dx, offset handleCtrlCend开始:。

汇编实验四报告

汇编实验四报告

汇编语言程序设计实验报告班级:计科1班学号:姓名:实验日期2015.11.2 成绩实验四子程序设计采用子程序设计,结合分支,循环程序设计,通过调用输入子程序,实现从键盘输入一个数组,然后调用显示子程序显示所输入的数组。

程序框图:程序清单:DATA SEGMENTBUF DB 7 DUP(?)N DB 2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,BUF ;BUF首地址送给SIMOV CX,7L1:CALL KeyinBL ;调用KeyinBL输入子程序MOV [SI],BLCALL SkipN ;调用SkipN空格子程序INC SI ;SI+1DEC CXJNZ L1CALL CRLH ;调用CRLH子程序MOV CX,7LEA SI,BUFL2:MOV BL,[SI]CALL DisplayBL ;调用KeyinBL输入子程序CALL SkipN ;调用SkipN空格子程序INC SIDEC CX ;CX-1JNZ L2 ;≠0则转到L2MOV AH,4CHINT 21HCRLH PROCMOV DL,0AH ;换行MOV AH,2 ;显示一个字符(2号功能)INT 21HMOV DL,0DH ;回车MOV AH,2 ;显示一个字符(2号功能)INT 21HRETCRLH ENDPSkipN PROCPUSH CX ;CX压栈MOV CX,2SK:MOV DL,20H ;空格的ASCII码MOV AH,2INT 21HDEC CX ;CX-1JNZ SK ;≠0则转SKPOP CX ;CX出栈RETSkipN ENDPKeyinBL PROCPUSH CXMOV BL,0 ;将BL寄存器清0MOV CH,2 ;循环次数为2次MOV CL,4 ;移位位数为每次移4位K2:SHL BL,CL ;将BL中的数左移四位MOV AH,1 ;从键盘输入一个数(1号功能)INT 21HSUB AL,30H ;减30HCMP AL,0AH ;比较AL与0AJB K1 ;小于则转到K1SUB AL,7K1:OR BL,AL ;BL和AL相或DEC CHJNZ K2 ;≠0则转K2POP CXRETKeyinBL ENDPDisplayBL PROCPUSH CXMOV CH,2MOV CL,4D2:ROL BL,CLMOV DL,BLAND DL,0FH ;DL˄0F相与ADD DL,30H ;DL+30HCMP DL,3AH ;如果DL<3AHJB D1 ;则转到D1ADD DL,7 ;加7D1:MOV AH,2 ;显示一个字符(2号功能)INT 21HDEC CHJNZ D2 ;≠0则转D2RETPOP CXDisplayBL ENDPCODE ENDSEND STARTCODE ENDSEND START运行结果:运行结果图内存图实验总结:。

汇编语言第四次上机实验报告

汇编语言第四次上机实验报告

汇编语言第四次上机实验报告时间: 2013/5/10 7:00-9:30 地点:南一楼803实验人员:计科10班王涛学号: U201114445一、题目1、用三种方式获取中断类型码10H对应的中断处理程序的入口地址。

(1)直接运行调试工具(TD.EXE),观察中断矢量表中的信息,指出中断类型码10H 对应的中断处理程序的入口地址。

(使用TD观看即可)。

使用TD观看时,在调试工具下调入以前编好的运行程序,跟踪执行INT 21H(即进入中断处理程序,方法是:执行到INT 21H 时,按ALT+F7),观察CS及IP是否改变成了前面记录的值。

(2)编写程序,用DOS系统功能调用方式获取,观察相应的出口参数与(1)看到的结果是否相同(使用TD观看即可)。

(3)编写程序,直接读取相应内存单元,观察读到的数据与(1)看到的结果是否相同.2、编制时钟显示程序。

要求每隔1s在屏幕右下角显示“年-月-日时:分:秒”,并将程序驻留在内存。

3、安装MASM32软件包,以其中的一个例子(如example\3dframes)为例,试用软件包中的集成汇编、连接和调试(TD32.EXE)功能。

软件包从汇编教学网站上下载,操作参见《80X86汇编语言程序设计上机指南》第七章。

二、实验要求1. 在调试工具下调入之前编好的运行程序,跟踪执行INT 21H(即进入中断处理程序,方法是:执行到INT 21H时,按ALT+F7),观察CS及IP是否改变成了前面记录的值。

操作提示:由于INT 21H内部的代码较长,为便于从中断处理程序返回到主程序,可在主程序INT 21H后面的指令上先设置好断点,当不再想跟踪中断处理程序时按F9即可。

实验报告的3、4、5 三个部分不用写。

2. 提示:CMOS内部07,08,09单元中分别存放着日、月、年的信息,“年”只显示低2位即可。

汇编教学网站(http://202.114.1.86)上有CMOS参考资料。

汇编语言实验报告四

汇编语言实验报告四

实验4实验学时: 2 实验地点:二综实验日期:一、实验目的掌握汇编编程规范,熟悉编程环境。

二、实验内容编程计算3550H-2320H,按16进制输出计算所得的差1230H。

再输出3550H-2321H的差,检验程序的正确性。

提示:考虑依次将1230H(即0001 0010 0011 0000B)从高位到低位,每4位二进制数一组分离出来,再将4位二进制数转换为ASCII码,利用DOS系统功能调用的2号子功能输出,就得到16进制数据的输出效果。

本题要求综合应用移位操作、逻辑操作等指令,并利用条件转移指令实现简单的循环程序,程序流程如图1所示。

DOS系统功能调用的2号子功能格式见dos调用表。

图1 16进制数据输出程序流程图三、实验步骤算法及关键代码1.分析1)关于rol指令rol bx,t:把目的地址中的数据循环左移t次,每次从最高位(最左)移出的数据位都补充到最低位(最右),最后从最高位移出的数据位保存到CF标志位。

2)将dl4位二进制转换为ASCII码add dl,30h2.主要代码如下DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV bx,3550hMOV ax,2320hsub bx,axmov cx,4;此处输入代码段代码B: rol bx,1rol bx,1rol bx,1rol bx,1mov dl,bland dl,00001111badd dl,30h;二进制转换为ASCII码mov ah,02hint 21hloop BMOV AH,4CHINT 21HCODES ENDSEND START3.运行4.执行结果如下四.实验小结(简单说明实验过程中出现的问题和解决方法)1. 出现错误“MOV AH,2h INT 21H ”未写在主程序段B内,导致没有输出。

《汇编语言》实验报告

《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。

实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。

汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。

本实验通过编写汇编语言程序,加深对汇编语言的理解。

二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。

2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。

3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。

b.设置段寄存器,将数据段地址加载到DS寄存器中。

c.设置显示模式和光标位置。

d.将字符串逐个字符输出到屏幕上。

e.关闭显示模式。

4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。

5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。

三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。

通过程序分析和调试过程,加深了对汇编语言的理解和掌握。

四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。

通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。

同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。

在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。

总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。

汇编语言实验报告4

汇编语言实验报告4

程及屏幕字符显示程序一、实验目的1、熟练掌握汇编语言的程序格式,程序设计方法;学会使用masm6.11对源程序进行编译、链接、调试和运行2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。

3、利用^Break退出程序的方法及局限性。

4、汇编程序的编写二、实验任务1学习汇编语言程序的上机过程2. 利用INT 21的09H号功能调用显示字符串。

验证以下程序1)用A命令在100H处键入下列程序:MOV AH, 9MOV DX,110INT 21INT 202)用A命令在110H处键入下列字符串的ASCII码:DB 'This is a sample!$'3)用N命令和W命令将此程序(包括数据区)存入文件名为的磁盘文件中。

(存入前BX:CX必须置为文件长度值)。

4)用Q命令退出DEBUG。

5)在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG 检查程序有无错误。

(给出结果截图)3、利用INT 21H 2号功能显示字符: 1)用A命令在100H处键入下列程序: XOR DL,DLMOV CX,100LOP: MOV AH,2INT 21INC DLPUSH CXMOV CX,8DELY: PUSH CXMOV CX,256J: LOOP JPOP CXLOOP DELYPOP CXLOOP LOPINT 202)用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。

仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?3)按CTRL+BREAK退出此程序,若一次不行可多做几次。

4 编写一个简化的段定义结构程序:先提示输入数字“Input number:0-9”,然后在下一行显示输入的数字,结束;如果不是键入了0-9 数字,就提示错误“ERROR!”,继续等待输入数字。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

成 绩 评 定 教师签名: 2015 年 月 日
院 专 年
系: 业: 级:
计算机科学学院 计算机科学与技术 2014 级 汇编语言
课程名称: 学 姓 号: 名:
指导教师:
2015 年 12 月 9 日
年 级 专 业 实 验 名 称
2014 级 班号 计算机科学与技术
学号 姓名 设计型 综合型 创新型
8086 汇编实验四 子程序和串指令
实验 ቤተ መጻሕፍቲ ባይዱ型
call avg dtoa number,avgnumber output number add esp,10 INVOKE ExitProcess, 0 ; exit with return code 0 PUBLIC _start ; make entry point public END ; end of source code
; start of main program code PROC push mov pushad pushf NEAR32 ebp; ebp,esp;
mov ebx,[ebp+14] mov ecx,0 mov cx,[ebp+12] movsx edx,cx mov eax,0 jecxz endcount forcount: add eax,[ebx] add ebx,4 loop forcount mov ebx,edx cwd idiv ebx endcount: mov ebx,[ebp+8] mov [ebx],eax popf popad pop ebp ret avg ENDP _start: output tie mov nbrElts,0 lea ebx,nbrArry input1: input number,20 cmp number,'#' je endwhile atod mov inc add jmp endwhile: lea push push lea push number [ebx],eax nbrElts ebx,4 input1 eax,nbrArry eax nbrElts eax,avgnumber eax
实 验 目 的 或 要 求
; reserve storage for data byte "输入一个数组(以#结束)",cr,lf,0 dw ? dword maxNbrs dup (?) byte 20 dup (?) byte cr,lf,0 avgnumber dword ?
.CODE avg
实验目的: 掌握子程序设计的原理和方法,重点掌握子程序编写和调用的过程以及堆栈操作和参数以 及局部变量的概念。掌握串操作指令的用法,注意 DF 标识位以及源串、目标串的存储和改变。 实验要求: (1)编写子程序 (2)在主程序中调用子程序 (3)实现主程序与子程序的参数传递 .实验 1 题目:写一个过程 avg,该过程可找出一个字串的平均值,过程 avg 有两个参数,用堆 栈进行参数传递。 (1)串的地址 (2)串中元素的个数。 实验要求:例如,输入的串元素为 1,3,-9,5,12,那么输出是: 2。 1、程序清单。 .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.h cr EQU Lf EQU maxNbrs EQU .STACK 4096 .DATA tie nbrElts nbrArry number 0dh 0ah 100 ; header file for input/output ; carriage return character ; line feed ; reserve 4096-byte stack
2、执行结果截图
内容包括:总结经验提高编程及调试能力。调试情况,如上机时遇到的问题及解决的办法, 观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析; 实验的心得体会等。
实 验 结 果 分 析 及 心 得 体 会
通过实验发现自己还有很多的不足,对知识的理解不清晰,做每道题都会花费很多的时 间来看课本,有很多简单的错误阻碍程序的正常运行。关于解题技巧:在做实验题目之前一 定要认真读懂题目并认真思考分析,理清自己的思路,在草稿纸上先简单的规划好程序的着 手点和过程,这样在写程序的时候才能清清楚楚的知道下一步该做什么,从而快速解决问题。
相关文档
最新文档