汇编语言实验7

合集下载

汇编语言实验报告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. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。

微处理器使用的是PCB-512主板,而高级汇编语言是MASM。

2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。

我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。

3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。

(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。

(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。

(4)了解8086微处理器的结构和原理。

4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。

我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。

5. 实验结果在我们的实验中,我们成功完成了上述两个程序。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。

我们认为这个实验对我们今后的学习和工作都有很大的帮助。

结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

汇编实验报告七

汇编实验报告七

计算机组成与汇编语言实验报告
通过结果说明程序运行结果正确。

2.调试程序2的运行结果如下。

说明程序实现的功能是查找0第一次出现的位置。

通过结果说明程序运行结果正确。

1.编写程序1运行结果如下。

4.编写程序2运行结果如下。

5.编写程序3运行结果如下。

实验情况与体会:通过本次上机实验,学习了数值转换。

实验过程中,遇到很多问题,比如程序一的编写,基本上都是学习书本以及依靠书本多做题才编出来的,仅有的几次上机实验,要抓紧时间学习和交流,时间挺少的。

在今后的学习和生活中,我们都需要相互学习、相互交流,共同进步。

学习是一个循序渐进的过程。

通过这次实验,使我了解到运行调试程序的不易,今后一定更加努力,把程序做到最好!对于不足之处,会积极改正。

汇编语言实验7实验报告

汇编语言实验7实验报告

汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。

二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。

三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。

为了方便起见,我们可以先规定字符串的最大长度为100。

接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。

然后,我们需要使用INT 21H中断来读取用户输入的字符串。

具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。

接着,我们需要将该字符串逆序输出到屏幕上。

为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。

具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。

《汇编语言》实验报告

《汇编语言》实验报告

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

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

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

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

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

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

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

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

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

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

e.关闭显示模式。

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

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

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

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

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

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

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

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

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

汇编语言程序实验

汇编语言程序实验

汇编语言程序实验实验目的【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个点高。

汇编语言实验七实验报告

汇编语言实验七实验报告汇编语言实验七实验报告一、实验目的本次实验的目的是了解多重循环结构的编程技巧,并使用它们对数据进行排序和搜索。

二、实验内容本实验内容主要包括:1.使用多重循环结构实现数据的排序,如冒泡排序、快速排序等;2.使用多重循环结构实现数据的搜索,如线性搜索、二分搜索等;3.使用结构化编程实现控制结构,如条件判断、循环结构等来完成数据的排序和搜索。

三、实验过程1. 冒泡排序本实验使用多重循环结构,采用冒泡排序的方法,实现对一组数据的排序。

具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 0, 5, 2count dw 6temp dw ?.codemain procmov ax,@data mov ds,axmov ax,array mov si,axmov cx,count mov cl,2l1:mov di,simov bx,[di] inc dil2:mov ax,[di] cmp ax,bxjng l3mov temp,ax mov [di],bx mov bx,temp l3:inc diloop l2inc sidec cxjnz l1 ;循环结束 mov ax,countsub ax,2l4:mov di,simov ax,[di]mov bx,[di+2]cmp bx,axjng l5mov temp,axmov [di],bxmov [di+2],temp l5:inc sidec axjnz l4 ;循环结束 tmov ax,4c00hint 21hmain endpend main上述代码主要实现了多重循环结构,包括两个重复循环:一个用来对数据进行比较,另一个用来循环处理剩下的数据项,直到排序完成。

2. 线性搜索接下来实现线性搜索的功能,具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 5, 0, 2count dw 6key dw 4add dw 0.codemain procmov ax,@datamov ds,axmov ax,arraymov di,axmov cx,countl1:cmp [di], keyjne l3jmp l2l3:inc diloop l1l2:mov ax,add mov bx,count sub bx,1mul bxadd ax,key mov bx,2div bxinc axmov bx,4mul bxmov di,axmov ax,array add ax,dimov si,axmov ax,[si] mov bx,keyje l4mov ax,-1l4:mov ax,4c00hint 21hmain endpend main上述代码主要实现了线性搜索的功能,通过比较数组中的每一项与给定的关键字,如果相同,则记录下该项的偏移量,然后根据偏移量计算出索引,最终返回数组中搜索到的数据。

汇编语言程序设计实验报告

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

在计算机科学与技术领域,汇编语言程序设计是一门重要的课程。

本篇实验报告将介绍我在汇编语言程序设计实验中所学到的知识和经验。

实验目的本次实验的目的是通过编写汇编语言程序,加深对计算机底层原理的理解,并掌握汇编语言的基本语法和编程技巧。

实验环境在实验中,我使用了一台运行Windows操作系统的计算机,并安装了MASM 汇编语言开发工具。

实验内容1. 汇编语言基础知识在实验开始前,我先学习了汇编语言的基础知识。

汇编语言使用助记符来代表机器指令,与机器指令一一对应。

了解了寄存器、内存和指令的概念,并学会了如何使用它们来编写汇编程序。

2. 汇编语言程序设计在实验中,我编写了一些简单的汇编语言程序,以加深对汇编语言的理解和应用。

例如,我编写了一个计算两个数之和的程序,通过将两个数存储在寄存器中,并使用加法指令进行运算,最后将结果保存到指定的内存位置。

3. 汇编语言程序调试在编写汇编语言程序时,我遇到了一些错误和问题。

为了解决这些问题,我学会了使用调试工具来定位错误。

通过逐步执行程序,并观察寄存器和内存的变化,我能够找到程序中的错误并进行修正。

4. 汇编语言程序优化在实验中,我也尝试了对汇编语言程序进行优化,以提高程序的性能和效率。

通过减少指令的数量和使用更高效的算法,我成功地改进了程序的执行速度。

实验心得通过本次实验,我深刻体会到了汇编语言程序设计的重要性和挑战性。

汇编语言虽然复杂,但它能够直接操作计算机的硬件,提供了更高的灵活性和效率。

通过编写汇编语言程序,我不仅加深了对计算机底层原理的理解,还提高了问题解决和调试能力。

总结汇编语言程序设计实验是一门重要的课程,它为我们提供了学习计算机底层原理和编程技巧的机会。

通过实验,我掌握了汇编语言的基本知识和技巧,并成功编写和优化了汇编语言程序。

这次实验不仅加深了我的理论知识,还培养了我的实际操作能力。

汇编语言 王爽_完整答案

第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。

(2)1KB的存储器有1024个存储单元。

存储单元的编号从0到1023。

(3)1KB的存储器可以存储1024*8个bit,1024个Byte。

(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。

(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。

(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。

则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。

(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。

(8)在存储器中,数据和程序以二进制形式存放。

第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。

mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。

汇编语言程序设计实验篇

汇编语言程序设计实验篇在计算机科学领域中,汇编语言是一种低级编程语言,它直接操作计算机硬件资源,具有高效性和灵活性。

本篇文章将介绍汇编语言程序设计实验的相关内容,包括实验目的、实验环境、实验步骤和实验总结。

实验目的汇编语言程序设计实验的主要目的是使学生掌握使用汇编语言编写程序的基本技能。

通过实践操作,学生将理论知识应用于实际情境中,深化对汇编语言的理解,并培养一定的编程能力。

实验环境在进行汇编语言程序设计实验之前,学生需要准备适当的实验环境。

以下是必备的硬件和软件资源:1. 计算机:一台能够运行汇编语言的计算机。

2. 汇编语言编辑器:如MASM、NASM等,用于编辑和编译汇编语言程序。

3. 调试器:如调试版本的DOSBox、CodeView等,用于调试程序,定位和解决错误。

实验步骤在进行汇编语言程序设计实验时,学生可以按照以下步骤进行操作:1. 确定实验内容:根据实验要求,选择适当的汇编语言程序设计任务,如编写一个计算两个数相加的程序。

2. 编写程序源代码:使用汇编语言编辑器,编写程序的源代码,包括程序的指令、数据段和代码段等。

3. 编译程序:使用编辑器提供的编译指令,将源代码编译成机器码,生成可执行文件。

4. 调试程序:使用调试器,对程序进行调试,定位和解决错误,确保程序能够正常运行。

5. 运行程序:运行已调试通过的程序,验证程序的正确性,并观察程序的执行结果。

6. 优化程序:对程序进行进一步优化,提高程序的执行效率和性能。

7. 总结实验结果:根据实验过程和结果,总结实验经验和教训,思考改进和拓展的可能性。

实验总结通过进行汇编语言程序设计实验,学生可以获得以下收获:1. 熟悉汇编语言:实验使学生更加熟悉汇编语言的语法和指令,增强对计算机底层运行机制的理解。

2. 培养编程能力:实验锻炼学生的编程能力和解决问题的能力,提高他们的逻辑思维和分析能力。

3. 提升实践能力:实验让学生通过实践操作,将理论知识应用于实际情境中,增强实践能力和动手能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mov bx,0
mov si,0
mov di,0
mov cx,21
ﻩ s:mov ax,[bx]
mov es:[si],ax
mov ax,2[bx]
ﻩ mov es:2[si],ax
mov ax,84[bx]
mov es:5[si],ax
mov dx,86[bx]
mov es:7[si],dx
div word ptr ds:168[di]
;以上是表示21年公司总收入的21个dword型数据
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15275,17800
;以上是表示21年雇员人数的21个word型数据
data ends
ﻩdd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
ﻩdd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
下面的程序中,已经定义好了这些数据:
Assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;以上是表示21年的21个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
db 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
mov es:13[si],ax
mov ax,168[di]
mov es:10[si],ax
add di,2
add bx,4
add si,16
loop s
mov ax,4c00h
int 21h
code ends
end start
三、实验结论、实验体会
年份是由4个字节组成,dd(双字)型数据送入内存中时,应使用两个16位寄存器分别传送地位和高位数据。隐含段地址的内存单元(如题中的data、table)不能直接进行数据传送,需用寄存器如ax作为中介。
data segment
ﻩdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'
ﻩdb '1984','1985','1986','1987','1988','1989','1990','1991','1992'
ﻩdb '1993','1994','1995'
汇编语言实验7
———————————————————————————————— 作者:
——————————————————————ቤተ መጻሕፍቲ ባይዱ————————— 日期:
计算机科学系实验报告(首页)
一、实验目的:进一步掌握各种选址方式的灵活应用
二、实验内容、程序清单及运行结果
Power idea公司从1975年成立到1995年的基本情况如下。ﻫ
table segment
db 21 dup ('year sumn ne ?? ')
table ends
编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中。
源代码:
assume cs:code,ds:data,es:table
dw 11452,14430,15257,17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
code segment
start:mov ax,data
ﻩ mov ds,ax
ﻩ mov ax,table
mov es,ax
相关文档
最新文档