汇编语言实验5

合集下载

汇编语言实验报告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. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

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

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

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

汇编语言(王爽第三版)实验5编写、调试具体多个段的程序

汇编语言(王爽第三版)实验5编写、调试具体多个段的程序

汇编语⾔(王爽第三版)实验5编写、调试具体多个段的程序实验5 编写、调试具体多个段的程序⼀。

将下⾯的程序编译连接,⽤Debug加载、跟踪,然后回答问题。

assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode endsend start程序分析:由于是初次接触,我们逐步讲解,废话多点。

(1)此程序考察的是内存中数据段和栈段的定义。

程序共定义了1个数据段,data段,⾸先明确,在程序运⾏开始(标号start处),这个数据段就已经被定义好了,并且分配了内存空间,并赋值了。

⼀个栈段,stack。

同理这个数据段在没有被⼈⼯定义为栈结构时,也被定义好了。

并且分配了内存空间,并赋值了。

将此程序编译并连接后,使⽤debug调试,(这⾥需要注意,以下的段地址可能由于系统不同⽽有差异,主要是理解概念。

)E:\assembly>debug eee.exe-rAX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B55 ES=0B55 SS=0B65 CS=0B67 IP=0000 NV UP EI PL NZ NA PO NC0B67:0000 B8660B MOV AX,0B66程序分析:我们什么也没执⾏,此时我们在data段定义的数据在哪?在ds:0100H处(原来讲过,程序最开始时ds:00~ds:100H是留给程序与操作系统通讯使⽤的psp内存段,参见书中p92);也就是说我们在ds:100H、0B55:100H或0B65:00处可以看见这些定义的数据。

汇编语言实验内容1-5

汇编语言实验内容1-5

指导教师:杨洪斌第一章汇编语言程序设计上机要求与目的1.1 概述上机实验总学时为20学时,其中综合性和设计性实验至少为8学时。

1.2 实验要求1、上机前作好充分准备,包括程序框图、调试步骤、测试方法、对运行结果的分析等。

2、上机时要遵守实验室的规章制度,爱护实验设备。

要熟悉与实验相关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。

在程序的调试过程中,有意识地学习及掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。

3、为了更好地进行上机管理,要求实验者按以下形式命名实验文件:学号.扩展名4、程序调试完后,须由实验辅导教师在机器上检查运行结果。

5、每个实验完成后,应写出实验报告。

1.3 实验报告实验报告的要求如下:①封面。

封面应包括:课程名称、实验序号、名称、专业、班级、姓名。

②实验报告编写要规范。

应包括:实验名称、目的、内容、原理、实验步骤、实验记录、数据处理(或原理论证、或实验现象描述、或结构说明等)。

③实验报告应附有实验原始记录和源程序清单。

1.4 加强实践能力的培养实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。

其中包括:实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等;开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。

对某一问题用不同的程序实现的能力,部分实验题我们提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或本分改变程序加以实现。

实验一用表格形式显示字符1.实验目的通过循环控制编程方式用表格形式显示ASCII字符表。

2.实验要求按15行×16列的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序显示对应的字符。

每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。

《汇编语言》实验报告

《汇编语言》实验报告

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

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

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

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

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

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

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

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

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

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

e.关闭显示模式。

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

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

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

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

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

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

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

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

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

北京理工大学汇编实验五实验报告概要

北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。

2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。

汇编语言程序实验

汇编语言程序实验

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

汇编程序语言实验报告

汇编程序语言实验报告

南昌大学实验报告五学生姓名:学号:专业班级:实验类型:■验证□综合□设计□创新实验日期:2009.12.02 实验成绩:一.实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。

二.实验内容1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。

要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。

2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。

三.实验环境PC微机DOS操作系统或Windows 操作系统MASM.EXE,LINK.EXE,或宏汇编集成环境四.实验步骤1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。

特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。

3.检查程序执行的结果是否正确。

五.实验结果实验程序:1. DATA SEGMENTBUF DB 0ABH,0CDH,0DEH,01H,02H,03HDB 3AH,4BH,5CH,6FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,10LEA BX,BUFAGAIN:MOV AL,[BX]CALL HEXASCINC BXLOOP AGAINMOV AH,4CHINT 21HHEXASC PROC NEARMOV DL,ALPUSH CXMOV CL,4SHR DL,CLPOP CXCALL DISP ;显示高位HEX数MOV DL,ALAND DL,0FHCALL DISPRETHEXASC ENDPDISP PROPCMP DL,9JBE NEXTADD DL,7NEXT:ADD DL,30HMOV AH,2INT 21H ;显示RETDISP ENDPCODE ENDSEND START2.统计并显示某键入字符的个数的程序:;COUNTER.ASMDATA SEGMENTCHAR DB ‘b’BUF DB 50H,? ,50H DUP(?)DATA ENDSMCODE SEGMENTASSUME CS:MCODE,DS:DATA START:MOV AX,DATAMOV DS,AXLEA DX,BUFMOV AH,9INT 21HLEA SI BUFMOV CL,[SI+1]MOV CH,0 ;CX中为字符串长度INC SIINC SI ;SI指向串首址TABLEMOV AL,CHARMOV AH,0 ;AX中为待查字符PUSH SIPUSH CXPUSH AX ;参数送堆栈CALL CHECKPOP AX :统计个数在AL中MOV DL,CHARMOV AH,2INT 21HMOV DL,ALAND DL,0FHCMP DL,9JBE NEXTADD DL,7NEXT:ADD DL,30HMOV AH,2INT 21H ;显示统计个数MOV AH,4CHINT 21HM CODE ENDSSCODE SEGMENTASSUME CS:SCODECHECK PROC FARPUSH BPMOV BP,SPMOV SI,[BP+10]MOV CX,[BP+8]MOV AX,[BP+6]XOR AH,AHAGAIN:CMP AL.[SI]JNE NEXT1INC AHNEXT1:INC SILOOP AGAINMOV AL,AHMOV [BP+10],AXPOP BPRET 4CHECK ENDPEND START六.实验总结从这个实验中,学会了用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化,检查程序执行的结果是否正确,以及修改程序中的错误等。

山东大学汇编语言上机实验——实验五

山东大学汇编语言上机实验——实验五

子程序设计2.6显示学生名次表rank编制一个程序,要求接受键盘输入的一个班的学生成绩,并存放于一个50字的grade数组中,其中grade+i保存学号为I+1的学生成绩。

然后根据grade中的学生成绩,把学生成绩依次填入50字的rank数组中,其中rank+i的内容是学号为i+1的学生的名次。

再按学号顺序把名次从终端上显示出来。

本题要做的主要工作和例2.2的内容是完全一样的,只是增加了由用户键入学生成绩及输出学生名次两个部分的内容,因此这三个部分可以用子程序结构来完成。

子程序结构划分的层次图如图2.17所示,可以看出,main为主要模块,其下一层的三个模块为程序的三大部分。

现将各模块说明如下:1.模块名:main 为总模块输入:从键盘输入一个班的学生成绩输出:显示一个班的学生成绩功能:根据输入的学生成绩,计算并显示学生名次。

算法如下:一个学生名次等于成绩高于该学生的人数+1.2.模块名:input输入:以学号为序型键盘输入一个班的学生成绩。

各个成绩之间用逗号隔开,最后以回车符号结束。

输出:把一个班的学生成绩存入grade数组。

功能:接受一个班的学生成绩。

调用子模块decibin把键盘输入的一个十进制数转换为二进制数。

调用子模块crlf完成回车,换行功能。

3.模块名:rankp输入:从grade数组取得一个班的学生成绩。

输出:以学号为序计算出该班每个学生的名次存入rank数组。

功能:计算一个班的学生成绩。

算法为:一个学生的名次等于成绩高于该生的学生人数加1.4,。

模块名;output输入:把rank数组取得一个班的学生名次。

输出:把一个班的学生名次以学号为序在总端上显示出来。

功能:先是一个班的学生名次。

调用子模块decibin把键盘输入的一个十进制数转换为二进制数。

调用子模块crlf完成回车,换行功能。

5:模块名:decilin输入:从键盘输入一个十进制数。

输出:把该数转换成二进制数并存入BX寄存器中。

汇编实验五报告

汇编实验五报告

汇编语言程序设计实验报告班级:计科1班学号:姓名:实验日期2015.11.10 成绩实验五 I/O程序设计制声响程序,从键盘输入(1~9)数字N 后,能发出N次声音,响声间隔1秒钟,并且每次显示一个串“The bell is ring”。

程序框图:程序清单:DATA SEGMENTA DB 'Please INPUT:$'BUF DB 'The bell is ring!$'FK DW 60000LON DW 5000DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,A ;取A的首地址L1: MOV AH,9 ;显示字符串(9号功能)INT 21HMOV AH,1 ;从键盘输入一个字符(1号功能)INT 21HCMP AL,3AH ;AL≧3AHJGE L1 ;则转L1CMP AL,30H ;AL≦30HJLE L1 ;则转L1SUB AL,30H ;AL减去30HXOR AH,AHMOV CL,ALCALL CRLH ;调用CRLH子程序MOV DI,CXMOV CH,0MOV CX,DIL3:LEA DX,BUF ;取BUF首地址MOV AH,9 ;显示字符串(9号功能)INT 21HCALL SOUND ;调用SOUND子程序CALL CRLHCALL DELAY ;调用DELAY子程序LOOP L3MOV AH,4CHINT 21HSOUND PROCPUSH BXPUSH CXMOV BX,FKMOV CX,LONIN AL,61H ;将61H端口号送到ALAND AL,0FCH ;AL˄0FCHK1:XOR AL,2OUT 61H,ALMOV BX,FKK2:DEC BX ;BX-1JNZ K2 ;≠0则转K2DEC CX ;CX-1JNZ K1 ;≠0则转K1POP CXPOP BXRETSOUND ENDPCRLH PROCMOV DL,0AH ;换行MOV AH,2 ;显示一个字符(2号功能)INT 21HMOV DL,0DH ;回车MOV AH,2 ;显示一个字符(2号功能)INT 21HRETCRLH ENDPDELAY PROCPUSH AXPUSH DXMOV AX,30000LL1:MOV DX,60000LL2:DEC DX ;DX-1JNZ LL2 ;≠0则转D2DEC AX ;AX-1JNZ LL1 ;≠0则转D1POP AXPOP DXRETDELAY ENDPCODE ENDSEND START运行结果:运行结果图实验总结:。

汇编语言实验报告

汇编语言实验报告

计算机专业类课程实验报告课程名称:汇编程序语言设计学院:计算机科学与工程专业:计算机科学与技术学生姓名:林*学号:*************指导教师:胡*日期: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可以看到上图中内存单元的值与手工计算的结果相符,说明程序是正确的。

汇编语言实验报告

汇编语言实验报告

next2: cmp array[si],80 jae L3 jl next3 next3: cmp array[si],70 jae L4 jl next4 next4: cmp array[si],60 jae L5 inc dh inc si dec dl jnz next jmp exit L1:inc al inc si dec dl jnz next jmp exit L2:inc bh inc si dec dl jnz next jmp exit L3:inc bl inc si dec dl jnz next jmp exit L4:inc ch inc si dec dl jnz next jmp exit L5:inc cl inc si dec dl jnz next
exit:ret count endp output proc near ;子程序二,用来输出相关内容 mov ah,0 push dx push cx push bx push ax lea dx,string1 ;输出100分的人数 mov ah,9 int 21H pop bx mov dl,bl add dl,30h mov ah,2 int 21H call enter lea dx,string2 ;输出90至99分的人数 mov ah,9 int 21H pop bx mov dl,bh add dl,30h mov ah,2 int 21H call enter lea dx,string3 ;输出80至89分的人数 mov ah,9 int 21H mov dl,bl add dl,30h mov ah,2 int 21H call enter lea dx,string4 ;输出70至79分的人数 mov ah,9

汇编语言上机实验汇总

汇编语言上机实验汇总

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

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

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

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)绘制简单的图形或运行一个音频文件。

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

汇编语言实验五编写、调试具有多个段的程序实验总结与体会

汇编语言实验五编写、调试具有多个段的程序实验总结与体会

汇编语言实验五编写、调试具有多个段的程序实验总结与体会下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!汇编语言实验五编写、调试具有多个段的程序实验总结与体会1. 引言在学习汇编语言的过程中,实验五是一个重要的环节,因为它要求我们编写并调试具有多个段的程序。

实验五汇编语言程序设计实验(一)

实验五汇编语言程序设计实验(一)

实验五汇编语言程序设计实验(一)一、实验目的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 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。

写出操作步骤,程序清单,程序注释,实验现象。

汇编语言实验5

汇编语言实验5

汇编语言实验5计算机科学系实验报告一、实验目的:掌握具有代码段、数据段、堆栈段等多个段程序的编写和调试二、实验内容、程序清单及运行结果1、编译连接下面程序,用debug加载、跟踪,回答问题。

assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart:mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode ends end start(1)CPU执行程序,程序返回前,data段中的数据为多少?执行程序后,data段中的数据不变,为原始数据。

(2)CPU执行程序,程序返回前,cs=0772H,ss=0771H,ds=0770H.(3)程序加载后,code段地址设为X,则data段地址为(x-2),stack段的段地址为(X-1).2、编译连接下面程序,用debug加载、跟踪,回答问题。

assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456hdata endsstack segmentdw 0,0stack endscode segment start:mov ax,stackmov ss,axmov sp,16mov ax,data mov ds,ax push ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode endsend start(1)CPU执行程序,程序返回前,data段中的数据为多少?执行程序后,data段有16个字节空间,前两个字数据不变,其余为0。

汇编语言子程序设计实验心得(精选5篇)

汇编语言子程序设计实验心得(精选5篇)

汇编语言子程序设计实验心得(精选5篇)在刚进入大学得知数学专业也要学习程序设计的时候,我的内心充满了喜悦,因为我喜欢数学的同时,一样喜欢计算机。

虽说程序设计只是计算机专业的冰山一角,但这却是基础,所以我下定决心要学好它。

前段时间,我们学习了前五章的内容。

第一章主要对c语言进行了简单的介绍;第二章便是对最基础知识的介绍:C语言的数据类型、常用的简单符号、运算符的结合性等;而第三章就开始进行一些简单的算术运算了,千万别以为这就是小学数学水平的东西,其实这跟数学还是有差别的;第四章键盘输入和屏幕输出就是告诉我们如何进行人机交流,把自己的东西输入电脑,再在屏幕上显示出来;第五章便开始利用计算机进行程序设计来解决生活中的实际问题,而这就需要一个很重要的结构——选择控制结构。

虽然刚开始学习的内容还不是很多,但我却在这为时不长的学习中,深深地感受到了c语言的魅力,以及它强大的“功效”:C语言语言虽简单,但表达能力却强,使用起来灵活方便,而且程序设计自由度大,我们可以从多角度寻找解决问题的方案。

虽然人的能力很强,但不是所有问题解决的最佳途径依赖于人,有时候依靠C语言既省时又省力。

就像对很多的数据进行运算时,对人来说可谓是一项大工程,一点不注意就会全盘皆输,要重新来过,让人头大;而对计算机来说,它只会执行你的指令,不管其他,没有枯燥,不懂乏味,更重要的是,效率尤其高。

不止计算,C语言还有很多用处。

刚开始的时候,我错误的认为C语言跟数学没有太大差别。

然而接触过后我才发现自己错的很离谱。

虽然C语言与数学有着难舍难分的关系,但C语言就是C 语言,它有着自己的语言,自己的思想跟自己的规则。

我们可以借助数学更好的掌握C语言,但不能因此混淆二者。

就像数学语言在程序中是不一定能够识别的(“=”在数学中是等于,在C语言中是赋值,C语言中的等于是“==”),虽然数学对C语言帮助很大,但C语言却不会因此就放你程序通过,不识别就是不识别,除非你用我自己的东西。

汇编实验报告

汇编实验报告

实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。

2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。

3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。

设定源程序的文件名为ABC。

DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。

图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。

2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。

(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。

(3)若程序中使用了宏指令,则汇编程序将展开宏指令。

源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B dd ?
datas ends
codes segment
assume cs:codes,ds:datasstart:mov h,4chint 21h
codes ends
end start
4.请执行下列程序,写出该程序的每条指令的功能及每条指令对标志位的影响。
Codes segment
Assume cs:codes
Start:
Mov ax,1234h
Mov bx,5678h
Mov dx,9abch
Mov cl,4
Shl dx,cl
Mov bl,ah
Shl ax,cl
Shr bl,cl
Or dl,bl
Mov ah,4ch
Int 21h
Codes ends
End start
思考与练习
1.如何判断一个数的正负?
2.如何将一个数的某几位变反?
实验五《算术运算指令2与逻辑运算指令》实验报告
实验名称
算术运算指令2与逻辑运算指令
实验
时间
2012年月日
节课
实验
时数

实验学生
指导教师
实验场地
实验准备
(1)操作系统: Windows 2000 /windowsxp
(2)汇编软件:MASM
实验目的
(1)了解汇编语言调试程序使用的基本过程。
(2)使用debug调试汇编语言源程序
3.算术左移和逻辑左移有什么区别?
老师评价
(3)CX寄存器内装入1234H,然后将CX寄存器中的第2、4、6、11位变反,其他位不变。
(4)DX寄存器内装入5678H,然后将DX寄存器中的所有位都变反。
3.编写一个程序求出双字长数的绝对值。假设该数是一个负数。双字长数在A和A+2单元,结果存放在B和B+2单元。
datas segment
A dd -123
(3)掌握算术运算指令中的乘法和除法
(4)掌握逻辑运算指令
实验任务及实验步骤
1.已知X,Y,Z,R和W均为存放16位带符号数单元地址。编写程序完成下列运算
Z(W*X)/(Y+6) R余数
Datas segment
W DW 123
X DW -96
Y DW 13
R DW ?
Z DW ?
Datas ends
Codes sgement
Assume cs:codes,ds:datas
Start:
Mov ah,4ch
Int 21h
Codes ends
End start
2.请编写程序完成以下功能。
(1)AX寄存器内装入5678H,然后将AX的第3、4、5、6位清0.
(2)BX寄存器内装入1234H,然后将BX寄存器的第0、1、6、7位置1。
相关文档
最新文档