汇编语言实验6

合集下载

汇编语言实验报告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开始:。

《汇编语言》实验报告

《汇编语言》实验报告

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

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

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

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

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

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

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

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

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

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

e.关闭显示模式。

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

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

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

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

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

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

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

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

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

(实验六)汇编语言课内实验报告

(实验六)汇编语言课内实验报告

实验四循环结构程序设计上机实验
一、实验目的:
1、掌握循环结构程序设计的基本方法。

2、掌握用masm for Windows编辑、编译、连接汇编语言源程序的基本方法。

3、掌握DEBUG调试程序的U、D、R、T、G、Q常用命令的用法。

二、实验步骤:
1、用ASM masm for Windows将源程序输入,其扩展名为.ASM。

2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。

若汇编时提示有错,则修改源程序后重新汇编,直至通过。

3、用LINK将.OBJ文件连接成可执行的.EXE文件。

4、用DEBUG调试程序并分析结果。

三、实验内容:
1. 在数据段中从变量DA1开始有N个带符号数。

把其中的正数、负数(设没有0)依次存入DA2、DA3开始的单元中并分别统计正、负数的个数存入DA4、DA5字节单元之中。

试编写程序。

将本例中的DEC指令修改为LOOP指令来实现循环程序的设计。

在修改过程中还应修改哪能些指令,请自己分析,为什么?
四、综合练习:
1.编写求100个正整数的和的程序。

如果和不超过16位字的范围(即65535),则将其和保存到WORDSUM单元中,若超过则显示OVERFLOW。

2.设有N个数,连续存放在以BUF为首址的字存储区中,试编写程序,统计其中最高的6位全1的数个数并将统计结果送入寄存器DX中。

五、实验报告(注意:将报告正反两面打印后用手写)附件如下:
实验四循环程序设计实验报告学号姓名成绩。

汇编语言程序实验

汇编语言程序实验

汇编语言程序实验实验目的【1】运用数值运算,通过编程及调试,熟悉8086|8088运算指令及DEBUG动态调试程序的方法【2】通过非数值运算编程,进一步掌握编程技巧和方法,这部分可以多做一些,题题目也较多【3】初步熟悉DOS系统和BIOS功能调用,其实前面要求中也包含着部分内容,比如数值运算包含显示功能调用一、实验原理【1】8086内部结构简介以下是微处理器的简要内部结构图其内部大概是有寄存器组,运算器,控制器,通过总线连接而成其中,标志寄存器用来指示运算结果的某些性质在编程中会反复用到这些寄存器,各个寄存器的作用如上表已经列出,表中的四个寄存器AX,BX,CX,DX都可以分别成为两个8位的寄存器,如AX可以拆开用成AH和AL,分别表示高八位和低八位【2】8086指令系统一条指令有操作吗,目的操作数和源操作数组成,指令简要分为以下几类(1)数据传送类,如MOV,LEA,XCHG等(2)算术逻辑类,如ADD,ADC,SUB,SBB等(3)移位与旋转类,(4)跳转类指令,又细分为段内,段间跳转,跳转范围不同(5)伪指令,伪指令只是对指令的说明,其本身不占内存单元【3】汇编语言的基本语法一般要把每段的信息都交代,由于8086的系统是分段的,因此程序的数据与代码都应放在相应的段中,段按性质可分为代码段,数据段,堆栈段等,一个程序至少要有一个代码段具体的说明后面结合程序再作介绍【4】DEBUG命令介绍在DOS环境下可以用DEBUG命令对程序进行调试,DEBUG命令具体有以下几条,简介其各条指令的功能(1)A 汇编命令,从此命令往下逐行汇编(2)P和T命令单步执行命令,也就是跟踪命令,只是T命令跟踪到循环体中去(3)D 内存显示命令(4)R 寄存器显示命令(5)Q 推出DEBUG的命令当然还有不少,这里就不一一列举了,熟悉以上的准备知识,下面就可以着手编程了。

二、实验内容针对实验目的,每一个要求都选做不少于两个题目,共完成以下的实验内容【1】数值运算类,完成20个8位无符号二进制数的求和【2】完成减法运算,例如123456-789123【3】非数值运算类,统计一百个数中正负数和零的个数【4】代码转换,完成组合BCD码与二进制码的转换【5】排序,将80个数按升序排列【6】BIOS功能调用,将运算结果显示出来【7】回显,键入一个数字或字符,回显在屏幕上【8】画一个矩形废话少说,直接上程序1.加法程序,以下程序实现20个8位无符号数的相加,并显示结果【设计思想】:将20个数放入一段内存,使用LOOP循环20次,每次取出一个数,不断和之前AX之中的和数相加【难点解决】:由于是第一个程序,那些格式都要熟悉,本程序就一个循环,难点是显示部分,要不断右移,逐位显示;加法程序全文如下DATA SEGMENT ;数据段TAB DW 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ;随便自定义20个数DATA ENDS ;数据段结束CODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATA ;代码段开始MOV DS,AXMOV AX,0MOV CX,20 ;CX放20,用于控制循环次数LEA SI,TAB ;SI存放TAB首地址MOV BX,0 ;BX寄存器清零SUM: MOV AX,[SI] ;开始相加,AX取得第一个加数ADD BX,AXINC SI ;SI加1,指向下一个数INC SILOOP SUM ;一次相加结束,LOOP循环PUSH BX ;相加结束,结果存于BX中LOP2: MOV CL,04 ;CL控制移位位数AND BL,0F0H ;取BL高四位SHR BL,CLMOV DL,BL ;DL存放数据用于显示ADD DL,30H ;转换成ASC2码CMP DL,3AH ;如果数字大于9,转化时再加7JB NEXTADD DL,7NEXT: MOV AH,2 ;2号功能调用,显示高位INT 21HPOP BXLOP1: MOV DL,BL ;做同样的事情,显示BL低4位AND DL,0FHADD DL,30HCMP DL,3AHMOV AH,2INT 21HMOV AH,4CH ;程序正常结束INT 21HCODE ENDSEND START2、减法程序,实现减法并显示结果,123456-789123【设计思想】(1)首先判断两个数那个大,大的减小则结果为正,否则为负,但程序始终使用大的减小的(2)低位数字在前,两位两位相减,结果存于开辟的数据段中【难点解决】难点在于显示,判断部分也不是很麻烦程序如下,有些不重要的部分就不写了,浪费时间DATA SEGMENT 'DATA' ;数据段定义ORG 0100HDATA1 DB 56,34,12 ;注意高位是在后面的,前面的反而是低位DATA2 DB 23,91,78RESULT DB 'H', 6 DUP(0),'$'DATA ENDSCODE SEGMENT 'CODE'ASSUME DS:DATA ASSUME CS:CODESTART: MOV AX,DATAMOV DS,AXMOV CX,3 ;控制循环LEA DI,DATA1 ;DI取得DATA1的首地址LEA SI,DATA2 ;SI取得DATA2的首地址ADD DI,2ADD SI,2 ;SI ,DI自加2,获得最高位地址用于比较PUSH AXPUSH BX ;AX,BX压栈以保存原值MOV AX,[DI]MOV BX,[SI] ;判断SI,是否比DI数大SUB AX,BX ;如果大于,则互换指针,并且输出负号JNB LOOOPMOV AH ,2MOV DL,‘—’INT 21HLOOOP:LEA BX,RESULT ;如果DI中本来就是大数,直接减CLC ;进位清零LP: MOV AL,[DI]SBB AL,[SI] ;开始减法运算MOV [BX],AL ;结果存于BX所指内存中INC DI ;地址都自加1INC SIINC BXLOOP LP ;循环3次,完成所有减法MOV CX,0204HPUSH CXLOP1: LEA BX,RESULT ;运算结果存于RESULT中,一下实现显示MOV AX,[BX]ROL AX,CLMOV DL,ALAND DL,0FHADD DL,30HCMP DL,3AH ;这与第一个一样,逐位显示JB NEXT1ADD DL,7NEXT1: MOV AH,2INT 21HDEC CHCMP CH,0JNZ LOP1POP CXMOV AH,4CH ;程序正常退出INT 21HCODE ENDSEND START这个程序还是要注意算法,一开始都不注意,上来直接减,其实不管怎么算,都是大数减小数,检查时老师提出了这一点3、统计,非数值运算类,统计一百个数中正负数,0的个数【设计思路】通过比较判断,用两个选择结构,实现对三个变量的逐个加1 【难点解决】关键是做到不遗漏,不重复的分类,每次只有一个自加,自家完后必须直接跳到本次循环最后DATA SEGMENT 'DATA'TAB DB 1,2,3,4,0,0,0,-2,0,-4 ;随便定义一些数DATA ENDSCODE SEGMENT 'CODE'ASSUME DS:DATAASSUME CS:CODESTART: MOV AX,DATAMOV DS,AXMOV AX,0MOV DX,0MOV CX ,10LEA SI,TABSU: MOV BL,[SI]ADD BL,BLJNZ LOP3 ;判断是否为0,不是就跳转INC AL ;存放0JMP EDLOP3: ADD BL,0JS LOP1 ;判断是否为正数,不是就跳转INC DH ;正数个数JMP EDLOP1: INC DL ;负数个数JMP EDED: INC SILOOP SU ;完成一次循环PUSH DXMOV DL,AL ;以上完成统计,下面完成结果显示ADD DL,30H ;输出0的个数MOV AH,2INT 21HPOP DXPUSH DXMOV AX,DX ;输出正数个数MOV DL,AHADD DL,30HMOV AH,2INT 21HPOP DXMOV AX,DXMOV DL,AL ;输出负数个数ADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START就是显示三个统计结果时没有间隔,两位16进制数紧挨着,说明一下4、代码转换,完成组合BCD码到二进制数的转换【设计思路】如提示所给的,利用(((A×10)+B)×10)+C)×10)+D的算法【难点解决】程序实现一个十进制转化为二进制,其实是16进制,程序经过一些拆开乘10的运算,保持原数大小不变,但存到寄存器中的数默认已经是16进制的了,要逐位找到A,B,C,D还要循环控制乘以10,程序如下,组合BCD码转换DATA SEGMENTDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV BX,0MOV SI,0AH ;SI中放的是10,用来相乘MOV CL,4 ;用来控制移位位数MOV CH,3 ;控制循环次数MOV AX,9649H ;赋给要转化的数LP: ROL AX,CL ;AX中的数左移4位PUSH AX ;保存现在的AX值AND AX,0FH ;取AX最低位ADD AX,BXMUL SI ;乘以10MOV BX,AX ;值暂时保存在BX中POP AXDEC CH ;CH减1,循环了一次JNZ LP ;如果循环三次完成,跳转到LP位置ROL AX,CL ;这是个位的数,不用乘10了AND AX,0FHADD AX,BXMOV BX,AX ;BX中存放的是转化过的数MOV AX,0 ;以上已经转化完成,下面是显示的程序了MOV CX,0404HPUSH CXLOP1: ROL BX,CL ;这个程序在每一个程序最后的显示部分都会有MOV DL,BL ;就是一个逐位显示的程序AND DL,0FHADD DL,30HCMP DL,3AH ;判断ASCII码,显示的入口参数是ASCII码JB NEXTADD DL,7NEXT: MOV AH,2INT 21HDEC CHCMP CH,0JNZ LOP1 ;判断是否显示完成POP CXMOV AH,4CHINT 21H ;系统功能调用,程序结束CODE ENDSEND START5、排序,实现对10个数的降序排列其实就是很熟悉的冒泡法排序,具体思路不用再罗嗦了,直接上程序STACK SEGMENT STACK ;定义堆栈段DW 300 DUP(?)STACK ENDSDATA SEGMENT ;数据段定义TAB DB 01H,31H,08H,24H,99H,0A2H,67H,0ACH,2BH,5CHTAB1 DB 'H,','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CL,9 ;外循环次数为9LOP1: MOV CH,9LEA SI,TAB ;分别取地址LEA DI,TABLOP2: MOV AL,[SI]INC SIMOV AH,[SI] ;实现交换MOV BL,ALMOV BH,AHSUB BH,ALJC NETJMP NET1NET: XCHG AH,ALMOV [DI],ALINC DIMOV [DI],AHJMP NET2NET1: MOV [DI],ALINC DIMOV [DI],AHJMP NET2NET2: DEC CHTEST CH,0FFHJNZ LOP2DEC CLTEST CL,0FFHJNZ LOP1PRIT: LEA SI,TABMOV CH,10LOP3: MOV DL,[SI]INC SIMOV CL,04HMOV BL,DLROL BL,CLMOV DL,BLAND DL,0FHADD DL,30HCMP DL,3AHJB NEXTADD DL,7NEXT: MOV AH,2 ;2号功能调用INT 21HROL BL,CLMOV DL,BLAND DL,0FHADD DL,30HCMP DL,3AHJB NEXT1ADD DL,7NEXT1:MOV AH,2INT 21HMOV AX,SEG TAB1MOV DS,AXMOV DX,OFFSET TAB1 ;入口参数MOV AH,9 ;9号功能调用INT 21HDEC CHTEST CH,0FFHJNZ LOP3MOV AH,4CHINT 21HCODE ENDSEND START6、字符回显,系统功能调用,实现输入字符在屏幕上显示出来【设计思路】即使用2个系统功能调用,很简单的,没什么难得,特别是在写完前面那些程序之后,结合程序注释说明我的程序;加法程序STACK SEGMENT STACK ;堆栈段定义STACK ENDSDATA SEGMENT ;数据段定义,虽然说明也么有DATA ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATASTART: ;代码段开始MOV AX,DATAMOV DS,AXMOV AH,08 ;8号系统功能调用INT 21H ;键入的字符存放于AL中MOV DL,AL ;以下完成显示部分ADD DL,30HCMP DL,3AHJB NEXTADD DL,7NEXT:MOV AH,2INT 21HMOV AH,4CH ;程序正常退出INT 21HCODE ENDSEND START7、画一个矩形其实也就是调用功能,利用循环控制不断划线,程序如下显示彩色矩形DATA SEGMENTLINE DW 0 ;矩形块左上角的行ROW DW 0 ;矩形块左上角的列PIX DB 0 ;矩形块的颜色DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: ;主程序MOV AX , DATAMOV DS , AXMOV AH , 0MOV AL , 4INT 10H ;设置320×200彩色图形方式MOV AH,0BHMOV BH,01MOV BL,01INT 10HMOV CX, 4L1:CALL DISP_RECTcall delayinc PIX ;每循环一次,点的颜色加1ADD ROW , 30 ;改变下一个方块的显示位置LOOP L1MOV AH , 4CHINT 21H ;返回DOS;显示矩形块的子程序,矩形块的显示位置由DATA段中的LINE、ROW变量指定,;颜色由PIX变量指定,矩形块的大小是固定的,为10个点宽,100个点高。

宏汇编(MASN)及汇编语言上机过程实验报告

宏汇编(MASN)及汇编语言上机过程实验报告

佛山科学技术学院实验报告课程名称汇编语言程序设计实验项目实验一宏汇编(MASN)及汇编语言上机过程专业班级 13 网络工程班姓名学号指导教师杨定安成绩日期2015.10. 25一、实验目的1.通过实验了解和熟悉微机系统的配置。

2.学习在DEBUG状态下输入汇编源程序的方法。

3.初步掌握调试(在DEBUG状态下)的过程。

二、实验原理1. 本实验要求在DEBUG状态下输入汇编源程序,并用DEBUG命令进行调试。

用单步跟踪的方法验证指令的功能。

2. 以下是给定的参考程序,并在实验时在每条指令的“;”符号右边按要求填写指令的执行结果。

注:⑴微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”;⑵在DEBUG状态下执行程序时,“INT 20H”指令可使系统执行完该指令前的程序时返回到“-”提示符状态,并且恢复CS和IP寄存器原来的值。

三、实验仪器微机一台,U盘一块。

四、实验步骤1.开机和关机操作顺序开机:先打开微机外部设备电源开关,如显示器,最后打开主机电源开关。

关机:与开机相反,先关掉主机电源开关,然后关闭所有外设的电源开关。

2. 装入DEBUG程序若计算机系统启动正常,可以进入MASM文件夹或MASM5文件夹从磁盘上调用DEBUG,程序到内存。

如是WINDOWS环境下,先运行CMD命令,然后运行CD MASM命令,再运行DEB2000命令。

一般C盘上装有DEBUG和DEB2000软件,若没有,可以用复制命令从其它盘拷贝过来,然后从装有DEBUG 和DEB2000软件的磁盘上调用DEBUG和DEB2000软件程序。

例如:C :\MASM> DEB2000↙(↙回车符)-(-DEBUG 提示符)当显示器出现提示符“-”时,说明已进入DEBUG状态,这时,可用DEBUG命令进行操作。

4. 用DEBUG的Register命令检查所有寄存器内容,并作记录,主要是R命令5. 用DEBUG的Assemble命令输入汇编源程序。

计算机汇编语言实验报告

计算机汇编语言实验报告

计算机汇编语言实验报告一、实验目的本实验旨在通过编写计算机汇编语言程序,加强对计算机组成原理和汇编语言的理解,同时熟悉实际编写和调试过程。

二、实验内容1.用汇编语言编写一个简单的计算器程序,实现加法和减法操作。

2.编译并运行程序,测试其功能的正确性。

3.运用调试工具进行程序的调试,检查代码的运行流程。

三、实验步骤1.确定程序功能和设计思路:本次实验的目标是编写一个计算器程序,能够对两个数进行加法和减法操作。

我们可以通过定义一些操作码来表示不同的操作,再通过输入不同的操作码来执行相应的操作。

2.编写汇编语言程序:首先,需要定义一些变量和常量来存储输入的数和操作码。

然后,使用汇编语言的运算指令和控制指令来实现加法和减法操作,并将结果存储到指定的变量中。

最后,使用输出指令来显示结果。

3.编译并运行程序:将汇编语言程序编译为机器码,并通过计算机的指令集执行程序。

4.调试程序:利用调试工具,逐步执行程序,检查代码的运行流程和结果的正确性。

如有错误,进行适当的修改和调试。

5.测试功能和性能:使用不同的数和操作码进行测试,验证程序的功能和正确性。

四、实验结果经过编写、编译和调试,我们成功实现了一个简单的计算器程序。

程序能够根据输入的操作码,对两个数进行加法和减法操作,并将结果显示出来。

经过多次测试,程序的功能、正确性和性能都符合预期要求。

五、实验感想通过本次实验,我们对计算机组成原理和汇编语言有了更深入的理解。

在编写程序的过程中,我们发现汇编语言相比高级语言更加底层,需要考虑更多的细节和机器指令的使用。

同时,我们也意识到了调试的重要性,调试工具能够帮助我们分析和修正代码的错误,提高程序的质量。

六、实验总结通过本次实验,我们对计算机汇编语言的应用有了更深入的了解。

我们掌握了汇编语言程序的基本结构和语法规则,学会了使用汇编语言指令进行计算和控制。

同时,我们也提升了调试和测试的能力,加深了对计算机组成原理和汇编语言的理解。

汇编语言实验报告_6

汇编语言实验报告_6

青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。

然后在显示器输出排好序的数据, 中间用’,’隔开。

2.输出数据使用子程序方式。

算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。

(5)循环进入子程序, 输出原始数据。

(6)在子程序内循环输出每一位的十进制数字。

(7)主程序进行内外循环, 进行冒泡排序。

(8)再一次调用子程序输出排序后的结果。

调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。

所以前面必须加上MOV DX,OFFSET NOTE1。

(4)汇编语言是不会再输出汉字的。

(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。

调试结果:。

汇编语言实验报告

汇编语言实验报告

计算机专业类课程实验报告课程名称:汇编程序语言设计学院:计算机科学与工程专业:计算机科学与技术学生姓名:林*学号:*************指导教师:胡*日期:2014年12 月15 日电子科技大学计算机学院实验中心电子科技大学实验报告实验一1、实验名称:汇编源程序的上机调试操作基础训练2、实验学时:43、实验内容和目的:实验内容:1.DEBUG命令的使用2.程序的调试与运行1.编写程序计算以下表达式: Z=(5X+2Y-7)/2设X、Y的值放在字节变量VARX、VARY 中,结果存放在字节单元VARZ中。

实验目的:1.掌握DEBUG的基本命令及其功能2.学习数据传送和算术运算指令的用法3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。

4、实验原理:1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。

无错时继续第3步。

3.连接目标程序,产生可执行程序。

4.用DEBUG程序调试可执行程序,记录数据段的内容。

5、实验器材(设备、元器件)pc、window7平台、masm5开发环境6、实验步骤:1、在数据段中分别用两个单元varx和vary存放变量x 和y;另一个单元varz用来存放运算结果Z;2、由于是字节变量,所以用al 存放变量x的值,然后将al 左移两位得到4*x,再把al加上x,进而得到5*x;3、再用bl存放变量y 的值,用add命令得到2*y,之后把al 与bl相加,再用sub命令减去7,得到(5*x+2*y-7)的值,并保存到al中;4、最后将al右移一位,得到最后的z=(5*x+2*y-7)/2,并把al 的值送入varz单元;5、运行程序,使用-d 命令查看内存单元的信息;7、实验数据及结果分析:实验代码如下:电子科技大学计算机学院实验中心实验结果如下图:1、编译连接后执行程序:2、查看内存单元变量的值varx=05h,vary=07h,(5x+2y-7)/2=(25d+14d-7d)/2d=16d=10h可以看到上图中内存单元的值与手工计算的结果相符,说明程序是正确的。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。

2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。

4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。

4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。

4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。

5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。

希望对你有所帮助!。

汇编语言上机实验汇总

汇编语言上机实验汇总

汇编语言上机实验汇总汇编语言是计算机的低级语言,主要用于编写底层程序和驱动程序。

在学习汇编语言的过程中,学生通常需要进行一定数量的上机实验。

下面是一个汇编语言上机实验的汇总。

1.实验一:环境搭建-目标:搭建汇编语言开发环境2.实验二:基本语法-目标:学习汇编语言的基本语法和指令格式-内容:编写一个简单的汇编程序,包括数据段、代码段和堆栈段,以及常用指令(例如MOV、ADD、SUB、JMP等)的使用。

3.实验三:寄存器和内存操作-目标:熟悉汇编语言中的寄存器和内存的操作-内容:编写一个汇编程序,通过MOV指令将数据从内存中加载到寄存器中,然后进行运算,并将结果存储回内存。

4.实验四:条件分支和循环-目标:掌握汇编语言中的条件分支和循环结构-内容:编写一个汇编程序,使用条件分支指令(例如CMP、JE、JNE 等)实现一个简单的判断语句;然后使用循环指令(例如LOOP)实现一个简单的循环结构。

5.实验五:子程序和参数传递-目标:学习如何创建和调用子程序,并传递参数-内容:编写一个汇编程序,其中包含一个子程序,该子程序接受两个参数并返回它们的和。

然后在主程序中调用该子程序,并输出结果。

6.实验六:中断和异常处理-目标:了解中断和异常处理机制,并在汇编程序中处理中断或异常-内容:编写一个汇编程序,其中包含一个中断处理程序,当发生特定的中断时,该处理程序将执行一些特定的操作。

7.实验七:串操作和文件操作-目标:学习汇编语言中的串操作和文件操作-内容:编写一个汇编程序,使用串操作指令(例如MOVS、LODS、STOS等)操作字符串;然后使用文件操作指令(例如OPEN、READ、WRITE 等)读取或写入文件。

8.实验八:图形和音频处理-目标:了解汇编语言中的图形和音频处理- 内容:编写一个汇编程序,使用图形库(例如BGI、OpenGL、DirectX)绘制简单的图形或运行一个音频文件。

这些上机实验可以帮助学生逐步掌握汇编语言的基本知识和技能,并为以后的高级汇编语言编程打下基础。

汇编语言实验6

汇编语言实验6
Mov ah,4ch
Int 21h
Codes ends
End start
4.假设有一片连续的20个字节存储空间,请将该空间全部存入字符’f’。
Datas segment
Buf db 20 dup(?)
Datas ends
Codes segment
Assume cs:codes,es:datas
Start:
Mov ah,4ch
Int 21h
Codes ends
End start
.思考与练习
1.如何判别两个字符串是否相等,当CMPSB执行结束后。
2.如何判断是否扫描到了要找的字符,当SCASB指令
End start
3.假设有字符串str,扫描串str,判断str中是否有字符’T’,如果有将AH置1,否则将AH置0。
Datas segment
Str db ‘COMPUTER’
Datas ends
Codes segment
Assume cs:codes,es:datas
Start:
实验六串处理指令实验报告实验名称串处理指令实验时间2012实验时数实验学生指导教师windows2000windowsxp2汇编软件
实验六《串处理指令》实验报告
实验名称
串处理指令
实验
时间
2012年月日
节课
实验
时数

实验学生
指导教师
实验场地
实验准备
(1)操作系统: Windows 2000 /windowsxp
Datas segment
Str1 db ‘this is a good book’
Str2 db ‘this is a aood book’

汇编语言实验报告

汇编语言实验报告

汇编语⾔实验报告汇编语⾔实验报告专业:班级:姓名:学号:2011年12⽉14⽇⽬录实验1 利⽤DEBUG调试汇编语⾔程序段 (3)实验2 初级程序的编写与调试实验(⼀) (11)实验3 初级程序的编写与调试实验(⼆) (20)实验4 汇编语⾔程序上机过程 (28)实验5 分⽀程序实验 (33)实验6 循环程序实验 (40)实验7 ⼦程序实验 (45)实验1 利⽤DEBUG调试汇编语⾔程序段⼀.实验⽬的1.熟悉DEBUG有关命令的使⽤⽅法;2.利⽤DEBUG掌握有关指令的功能;3.利⽤DEBUG运⾏简单的程序段。

⼆.实验内容1.进⼊和退出DEBUG程序;1)开始—运⾏,输⼊cmd,点确定进⼊命令窗⼝2)在命令窗⼝中输⼊dubug进⼊debug程序3)进⼊debug窗⼝后,输⼊q命令退出debug2.学会DEBUG中的1)D命令(显⽰内存数据D 段地址:偏移地址)例1:-D100 ;显⽰DS段, 0100开始的128个节内容说明: 指定要显⽰其内容的内存区域的起始和结束地址,或起始地址和长度。

① D SEGREG[起始地址] [L 长度];显⽰SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容.② D SEGREG[段地址:偏移地址];显⽰SEGREG段中(缺省内默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省内默认为128)个字节内容-D ;默认段寄存器为DS,当前偏移地址(刚进⼊debug程序偏移地址为0100H)-D DS:100 ;显⽰DS段, 0100H开始的128个字节内容-D CS:200 ;显⽰CS段, 0200H开始的128个字节内容-D 200:100 ;显⽰DS段, 0200:0100H开始的128个字节内容-D 200 ;显⽰DS段, 0200H开始的128个字节内容-D 100 L 10 ;显⽰DS段, 100H开始的8H个字节内容2)E命令(修改指定内存)-E100 11 22 33 44 55 66 77 88-D 100结果:0AF1:0100 11 22 33 44 55 66 77 88例2:-E 100:E 地址数据表;从指定的地址开始⽤数据表给定的数据修改存储单元。

《汇编语言》实验6报告

《汇编语言》实验6报告
lea dx,info1
mov ah,9
int 21h
next: mov ah,1
int 21h
cmp al,'0'
jz disp1
mov str[si],al
inc si
inc cx
jmp next
disp1:
LEA DX,info2
MOV AH,9
INT 21H
disp2: mov dl,str[si]
INT 21H
CODE ENDS
END BEGIN
执行以上程序,观察执行结果。
2、从键盘输入一个字符,判断其是不是大写字母,如果是则请输出这个大写字母,如果不是,请输出“这不是一个大写字母”的英文信息(要求:能连续输入)。
3、编程实现查找子串。要求从键盘输入两个不等的字符串,查找长串中是否包含短串,若包含,则输出“Y”,否则输出“N”。(字符串自行定义)
《汇编语言》




班级:
学号:
姓名:
指导教师:
实验日期:
《汇编语言》实验报告
实验题目DOS中断调用程序设计完成日期2012.5.11
一、实验目的:
1、了解DOS中断功能调用的概念;
2、掌握使用INT21H中断的1#、2#、9#和10#功能调用
二、实验内容:
1、从键盘键入10个字符,然后以与键入相反的顺序输出。
MOV AH,2
INT 21H
MOV CL,STR1+1
XOR CH,CH
DEC CX
JZ NOTEXIST
MOV AL,STR2+2
LEA DI,STR1+2
CLD
SEARCH:

汇编语言实验报告6

汇编语言实验报告6

成绩评定教师签名嘉应学院计算机学院实验报告课程名称:汇编语言程序设计开课学期:2016-2017学年第1学期班级:1402指导老师:实验题目:转移指令原理学号:姓名:实验8分析一个奇怪的程序程序从start开始,将ax设置为0,然后设置2个字节的空空间将s2指向的内容放入s指向的内存中s的内容EBF6指s的地址相对于s1,跳转6个单位程序继续执行(机器指令为 JMP 0008),跳转到s(0b75:0008)的位置,s的内容为 EBF6,向低地址跳转6个单位(机器指令为 JMP 0000),即退出程序实验9 根据材料编程编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm!’。

对程序进行编译、链接、用debug跟踪程结果如图在data数据段中存放要显示的字符串及其属性,02h表示绿色,24表示绿底红字、71表示白底蓝字先初始化各寄存器,把ds寄存器指向data段,ss指向stack段,sp指向栈底因为要输出三个字符串,要循环三次,执行循环前把cx,ax等入栈,防止数据被意外改变输出的每个字符串有16(10h)个字符,每个字符占两个字节“属性+内容”,在偶地址中存放要输出的字符,存放在es段中在奇地址存放字符的表现属性,将一行字符串存进内存中,开始准备输出下一行字符串如果用t、p、g指令分步追踪程序的执行,可以看到字符串的存储过程,表现出单个的字符和属性,如图:。

实验10 编写子程序1、显示字符串子程序描述名称:show_str功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79)(cl)=颜色,ds:si指向字符串的首地址返回:无应用举例:在屏幕的8行3列,用绿色显示data段中的字符串assume cs:codedata segmentdb 'Welcome to masm!',0data endscode segmentstart: mov dh,8 ;dh装行号(范围:1--25)mov dl,3 ;dl装列号(范围:1--80)[注:每超过80等于行号自动加1]mov cl,0cah ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性) mov ax,datamov ds,axmov si,0call show_strmov ax,4c00hint 21hshow_str:code endsend start对程序进行编译、链接、用debug跟踪程执行结果如图:show_str子程序的分析:bx=行号*每行的大小(a0h)=显示区所在的行号首地址的偏移地址每个字符占两个字节“属性+内容”,bx=bx+相对于显示行的列偏移量*2es存放显存的位置cx存放data段中的内容,如果为0则结束程序如果结果不为0,就把data段中对应的字符及其属性存到显存中。

汇编语言(王爽第三版)实验6实践课程中的程序

汇编语言(王爽第三版)实验6实践课程中的程序

汇编语⾔(王爽第三版)实验6实践课程中的程序实验6 实践课程中的程序(1)将课程中所有讲解过的程序上机测试,⽤debug跟踪其执⾏过程,并在过程中理解所讲内容。

问题7.6 将data段中每个单词的头⼀个字母改为⼤写字母。

assume cs:codedata segmentdb '1. file 'db '2. edit 'db '3. search 'db '4. view 'db '5. options 'db '6. help 'data endscode segment程序分析:1)数据段定义了6个字符串结构,长度⼀致都是16字节,并且字符都是连续的,并且头⼀个字母在字符串中的位置都是第4个字符,在上⾯的寻址⽅式中,我们发现[bx+idata]⽅式⽐较适合这种情况,idata代表每个字符串起始地址,bx代表基本偏移地址,bx的偏移量也是有规律的16。

2)在debug中,这6个字符串显⽰的正好是6⾏16列的字符,是⼀个我们在C语⾔中讲到的⼆维数组[6][16],其实它在内存中是线性单列排列的。

3)遇到此种情况我们使⽤[bx+idata]的⽅式进⾏内存的寻址⽐较科学。

完整的代码如下:assume cs:codedata segmentdb '1. file 'db '2. edit 'db '3. search 'db '4. view 'db '5. options 'db '6. help 'data endscode segmentstart:mov ax, datamov ds, axmov bx, 0 ;将ds:bx指向data第⼀个单元mov cx, 6 ;需要修改6次s: mov al, [bx+3] ;使⽤[bx+idata]寻址⽅式,并送⼊al(单字节)and al, 11011111b ;转换为⼤写字母mov [bx+3], al ;回写内存add bx, 16 ;6个字符串长度⼀致,都是16字节,增量为16loop smov ax, 4c00Hint 21Hcode endsend start结果分析:(1)在循环中,如遇到loop指令,⾸先我们要认识到,(cx)=(cx)-1;直到cx=0退出循环。

北理工汇编语言实验报告6

北理工汇编语言实验报告6
3、利用文件句柄将两个文件合并成一个文件。要求: 1)在第一个文 件末 尾处换行回车,插入“The second file as follow:”; 2)换行回车,把第 二个文件 内容存放在后面。 代码及流程图如下: ASSUME CS:CODE,DS:DATA DATA SEGMENT BUF DB 0FFH
汇编语言实验报告
第六章 磁盘文件存取实验(设计性实 验)
班级:05611102 姓名:肖枫
学号:1120111431 实验日期:2013.9.14下午
第六章磁盘文件存取实验(设计性实验) 一、实验要求和目的
1. 理解文件、目录的概念; 2. 了解 FCB(文件控制块)方式文件管理方法; 3. 掌握文件代号式文件存取方式; 4. 学习使用文件指针读取文件
2、编写一个创建文件的程序,其要求如下: 1)用键盘输入文件名(可包含路径),若输入的字符串为空,则程序运行 结束; 2) 若目录创建成功,显示成功信息,否则,显示创建失败信息; 3) 从键盘输入20 个字符存放到新建立的文件中。 代码及流程图如下:
data segment handle dw ? msg1 db 'Please input the file route:', 0dh, 0ah, '$' msg2 db 0dh, 0ah, 'Error: create file failed!', 0dh, 0ah, '$' msg3 db 0dh, 0ah, 'Create file successful!', 0dh, 0ah, '$' msg4 db 0dh, 0ah, 'Error: write file failed!', 0dh, 0ah, '$' msg5 db 0dh, 0ah, 'Please input 20 characters:', 0dh, 0ah, '$' fn_buf db 64 db ? fn_str db 64 dup(0) wf_buf db 64

汇编语言与接口技术实验

汇编语言与接口技术实验

班级:计科143 姓名:张磊学号:20141111095实验成绩:课程:汇编语言与接口技术实验六同组者:肖洋,马畅实验日期:实验六显示接口实验一、实验目的1. 了解数码管动态显示与静态显示区别2. 掌握数码管动态显示控制原理3. 掌握数码管动态显示编程二、实验原理图6.1 LED数码管显示电路图6.1为实验板数码管显示电路,本实验板所用数码管为共阴极型,需要显示的数据通过74HC573进行锁存。

图中U6是数码管位选锁存器,数据通过数据总线送至U6后,经SEGLE(P27)进行置位实现锁存;U7是数码管段选码输出,段选码通过数据总线送至U7后通过DIGLE(P26)置位进行锁存。

三、实验内容使用定时器T0中断方式设计一个时钟表,用两位数码管分别显示时、分、秒。

1)分析本实验控制原理,画出程序流程图。

2)根据实验要求,编写系统程序,并在实验板上进行调试;班级:计科143 姓名:张磊学号:20141111095实验成绩:课程:汇编语言与接口技术实验六同组者:肖洋,马畅实验日期:四、实验分析及源程序#include "STC/STC15F2K60S2.H"#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit WEI_LATCH=P2^7;//数码管位选驱动锁存器锁存控制端sbit DUAN_LACTH=P2^6;//数码管段选驱动锁存器锁存控制端sbit LED_LATCH = P2^5;//led驱动锁存器控控制端sbit I2C_SCL = P2^0;sbit I2C_SDA = P2^1;uchar g_sec = 0;//存储秒uchar g_min = 0;//存储分uchar g_hour = 0;//存储小时uint int_time;//定时标志uchar uc_SegTable[] = //段选码{0x3f,0x06,0x5b,0x4f, /* 0、1、2、3 */0x66,0x6d,0x7d,0x07, /* 4、5、6、7 */0x7f,0x6f,0x77,0x7c, /* 8、9、A、B */0x39,0x5e,0x79,0x71, /* C、D、E、F */0x80,0x40,0x00 /* . 、- */};uchar uc_DigTable[] =//位选码{0xfe,0xfd,0xfb,0xf7,班级:计科143 姓名:张磊学号:20141111095实验成绩:课程:汇编语言与接口技术实验六同组者:肖洋,马畅实验日期:0xef,0xdf,0xbf,0x7f};void timer0_init();//定时器0初始化void DisplaySeg(uchar uc_SegDuan,uchar uc_SegWei,uchar uc_PointDisp);//数码管显示函数void Delay();//延时函数void TubeDisplay();//显示时间void main(){timer0_init();//定时器0初始化LED_LATCH = 1;P0 = 0xff;//消除LED干扰LED_LATCH = 0;//E2ReadByte(0x00);while(1){if(TR0 == 1)//时钟正常运行时显示时间TubeDisplay();//将时间显示到数码管}}void timer0_init(){TMOD=0x01;TH0=(65536-50000)/256; //=50000微秒=50毫秒班级:计科143 姓名:张磊学号:20141111095实验成绩:课程:汇编语言与接口技术实验六同组者:肖洋,马畅实验日期:TL0=(65536-50000)%256;EA=1; //开启总中断ET0=1; //打开定时器0中断TR0=1; //打开定时器0}void interserve(void ) interrupt 1{TR0=0; //关闭定时器T0int_time ++;if(int_time==20) //够20次中断,即1秒钟进行一次检测结果采样{int_time=0; //中断次数清0g_sec++; //秒加1if(g_sec==60){g_sec =0; //秒等于60就返回0,分钟金伟g_min++;if(g_min==60)//分等于60就返回0,小时进位{g_min=0;g_hour++;if(g_hour==24)//到24小时清0{g_hour=0;}}}班级:计科143 姓名:张磊学号:20141111095实验成绩:课程:汇编语言与接口技术实验六同组者:肖洋,马畅实验日期:}TH0=(65536-46083)/256; //重新给计数器T0赋初值TL0=(65536-46083)%256;TR0=1; //启动定时器T0}void DisplaySeg(uchar uc_SegDuan,uchar uc_SegWei,uchar uc_PointDisp) {if(1 == uc_PointDisp){/* 将段显示出来*/P0 = uc_SegTable[uc_SegDuan] | 0x80;DUAN_LACTH = 1;DUAN_LACTH = 0;/* 选择某位*/P0 = uc_DigTable[uc_SegWei];WEI_LATCH = 1;WEI_LATCH = 0;}else{/* 将段显示出来*/P0 = uc_SegTable[uc_SegDuan];DUAN_LACTH = 1;DUAN_LACTH = 0;/* 选择某位*/班级:计科143 姓名:张磊学号:20141111095实验成绩:课程:汇编语言与接口技术实验六同组者:肖洋,马畅实验日期:P0 = uc_DigTable[uc_SegWei];WEI_LATCH = 1;WEI_LATCH = 0;}}void Delay()//简单延时函数{uchar uc_Delay = 200;while(uc_Delay--);}void TubeDisplay(){DisplaySeg(g_hour / 10, 0, 0);//显示小时的十位Delay();DisplaySeg(g_hour % 10, 1, 1);//显示小时的个位,带小数点Delay();DisplaySeg(g_min / 10, 2, 0);//显示分的十位Delay();DisplaySeg(g_min % 10, 3, 1);//显示分的个位,带小数点Delay();DisplaySeg(g_sec / 10, 4, 0);//显示秒的十位Delay();DisplaySeg(g_sec % 10, 5, 0);//显示秒的个位,带小数点Delay();}班级:计科143 姓名:张磊学号:20141111095实验成绩:课程:汇编语言与接口技术实验六同组者:肖洋,马畅实验日期:五、实验结果及结论使用定时器T0中断方式设计一个时钟表,用两位数码管分别显示时、分、秒。

汇编 实验报告

汇编 实验报告

汇编实验报告汇编实验报告引言:汇编语言是一种低级语言,用于编写计算机程序。

在计算机科学领域中,汇编语言是一门重要的学科,它可以帮助我们更深入地了解计算机的内部工作原理。

本实验报告将介绍我在学习汇编语言过程中的实验经历和所学到的知识。

实验一:汇编语言的基本概念在本实验中,我首先学习了汇编语言的基本概念。

汇编语言是一种用于编写机器指令的低级语言,它直接操作计算机的硬件。

通过学习汇编语言,我了解了计算机内存、寄存器、指令和数据的存储方式,并学会了如何编写简单的汇编程序。

实验二:汇编语言的数据表示在这个实验中,我学习了汇编语言中的数据表示方法。

汇编语言中的数据可以用不同的方式表示,例如二进制、十进制和十六进制。

我还学习了如何使用数据寄存器和内存寻址来处理不同类型的数据。

实验三:汇编语言的指令集在本实验中,我学习了汇编语言的指令集。

汇编语言中的指令可以分为数据传送指令、算术运算指令、逻辑运算指令和控制指令等多种类型。

通过学习不同类型的指令,我可以编写更加复杂和功能强大的汇编程序。

实验四:汇编语言的程序设计在这个实验中,我学习了如何使用汇编语言进行程序设计。

通过学习汇编语言的程序设计技巧,我可以编写出高效、精确和可靠的程序。

我还学习了如何使用子程序、循环和条件语句等控制结构来实现不同的功能。

实验五:汇编语言的调试和优化在本实验中,我学习了如何调试和优化汇编语言程序。

调试是指在程序运行过程中发现并修复错误的过程,而优化则是指对程序进行性能提升的过程。

通过学习调试和优化技巧,我可以提高程序的效率和可靠性。

结论:通过这些实验,我对汇编语言有了更深入的了解。

汇编语言虽然复杂,但它可以帮助我们更好地理解计算机的内部工作原理,并且可以编写出高效、精确和可靠的程序。

通过学习汇编语言,我不仅提升了自己的编程能力,还对计算机科学有了更全面的认识。

我相信,在今后的学习和工作中,汇编语言将会发挥重要的作用。

汇编语言实验报告

汇编语言实验报告

xxxxxxx学院计算机工程系《汇编语言》·实验报告
实验一、查看CPU和内存,用机器指令和汇编指令编程2014.09.24实验二、用机器指令和汇编指令编程2014.10.08
实验三、编程、编译、连接、跟踪2014.10.15
实验四、[bx]和loop的使用2014.10.22
实验五、编写、调试具有多个段的程序(一)2014.10.29
实验六、编写、调试具有多个段的程序(二)2014.11.05
实验七、实践课程中的程序2014.11.12
实验八、寻址方式在结构化数据访问中的应用2014.11.19
实验九、分析一个奇怪的程序2014.11.26
实验十、根据材料编程2014.12.3
实验十一、编写子程序2014.12.10
实验十二、综合练习:求无符号字节序列中的最大值和最小值,设有一个字节序列,其存储首地址为3000H,字节数为008H,利用学过的方法编程,求出该序列中的最大值和最小值2014.12.17。

汇编实验报告6

汇编实验报告6

汇编实验报告6汇编实验报告6引言:汇编语言是一种底层编程语言,它直接操作计算机硬件,提供了对计算机底层资源的更精确控制。

在本次实验中,我们将继续学习和实践汇编语言的相关知识,探索其在计算机系统中的作用和应用。

一、实验目的本次实验旨在加深我们对汇编语言的理解,并通过实践进一步掌握汇编语言的基本概念、语法和应用。

具体目标如下:1. 掌握汇编语言的基本指令和寻址方式;2. 理解和实现简单的汇编程序;3. 学会使用调试工具调试汇编程序。

二、实验环境本次实验使用的环境为Windows操作系统和MASM汇编器。

在实验开始前,我们需要确保已经正确安装了MASM汇编器,并配置好了相关环境变量。

三、实验过程1. 编写程序本次实验我们将编写一个简单的汇编程序,实现两个数相加并输出结果的功能。

首先,我们需要使用文本编辑器打开一个新的文件,并保存为.asm格式。

接下来,我们将按照汇编语言的语法规则,逐步编写程序。

2. 汇编程序的结构一个标准的汇编程序由三个部分组成:数据段、代码段和堆栈段。

在数据段中,我们定义了需要使用的变量和常量;在代码段中,我们编写了实际的汇编指令;而堆栈段则用于存储程序执行过程中的临时数据。

3. 汇编指令的使用在本次实验中,我们将使用一些常见的汇编指令,如MOV、ADD、SUB等。

这些指令用于操作寄存器、内存和立即数,实现数据的传输、运算和比较等功能。

4. 调试程序编写完汇编程序后,我们需要使用调试工具对程序进行调试,以确保程序的正确性。

调试工具可以帮助我们逐条执行程序,并查看寄存器和内存的变化,从而找出程序中的错误。

四、实验结果与分析经过编写和调试,我们成功地实现了两个数相加并输出结果的功能。

我们可以通过调试工具查看程序执行过程中寄存器和内存的变化,以验证程序的正确性。

同时,我们还可以对程序进行性能分析,了解其在不同输入情况下的执行效率。

五、实验总结通过本次实验,我们深入学习了汇编语言的基本概念和应用。

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

计算机科学系实验报告
一、实验目的:掌握寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址的使用
二、实验内容、程序清单及运行结果
(1)将课程中讲解过的程序上机调试,用Debug跟踪其执行过程,并在过程中进一步理解所讲的内容。

a.在code段中填写代码,将data中的第一个字符串转化为大写,第二个字符串转化为小写。

assume cs:code,ds:data
data segment
db ‘BaSiC’
db ‘iNfOrMaTion’
data ends
code segment
start:
code ends
end start
b.编程,将data段中的每个单词改为大写字母。

assume cs:code,ds:stack
data segment
db ‘ibm ‘
db ‘dec ‘
db ‘dos ‘
db ‘vax ‘
data ends
code segment
start: code ends end start
(2)编程,将data段中每个单词的前4个字母改为大写字母。

assume cs:code
data segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify ' data ends
stack segment
dw 0,0,0,0,0,0,0,0 stack ends
code segment
start:
code ends
end start
三、实验结论、实验体会
做实验6后,掌握了用汇编语言进行大小写转化的方法;了解了and、or指令及寻址方式[bx(或si、di)+idata]、[bx+si(或di)]、[bx+si(或di)+idata]的意义和应用。

相关文档
最新文档