汇编实验报告

合集下载

汇编语言实验报告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用表格形式显示ASCII字符

汇编语言实验报告1用表格形式显示ASCII字符

汇编语言实验报告1一、实验内容:用表格形式显示ASCII字符二、实验要求:按15行×16列的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序显示对应的字符。

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

说明:显示调用DOS中断功能02,先考虑显示单个字符,再进行循环,程序关键在于寄存器的使用和循环控制。

MOV AH,02HMOV DL,10H ; 输出要显示的符号的代码,放入DL寄存器INT 21HMOV AH,02HMOV DL,0DHINT 21H ; 输出回车符MOV AH,02HMOV DL,0AHINT 21H ; 输出换行符三、实验源代码如下:DA TAS SEGMENTDA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DA TASMOV DS,AXMOV DX,10H ;初植10HNEXT:MOV CX,10H ;16列LOOP1:MOV AH,02H ;显示输出DL字符INT 21HINC DX ;DX加1PUSH DX ;把DX推进栈保存MOV DL,0 ;显示空白符INT 21HPOP DX ;把DX之前的数取回来LOOP LOOP1 ;当CX=0时会自动跳出LOOP1循环PUSH DX ;保存DX的数,即为了保存ASCII码MOV AH,02HMOV DL,0AH ;显示换行字符INT 21HMOV AH,02HMOV DL,0DH ;显示回车INT 21HPOP DX ;把DX之前的数取回来CMP DX,100H ;最后的字符的ASCII码为100HJB NEXT ;小于时就会NEXTMOV AH,4CH ;带返回码终止INT 21HCODES ENDSEND START四、实验运行结果如下:(附截图)。

汇编语言实验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. 输入输出指令:学习如何使用INT 21h中断来进行简单的键盘输入和屏幕输出操作。

2. 字符串操作指令:学习如何使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。

3. 实现一个简单程序:通过上述知识点,完成一个简单的程序,可以进行键盘输入和屏幕输出,并对两个字符串进行比较。

三、实验过程1. 输入输出指令在汇编语言中,我们可以使用INT 21h中断来进行键盘输入和屏幕输出操作。

其中,AH寄存器用于指定不同的功能号码。

例如:- AH=01h:在屏幕上显示一个字符- AH=02h:在屏幕上显示一个ASCII码值所代表的字符- AH=06h:从键盘读取一个字符下面是一个示例程序,可以让用户从键盘上输入一个字符,并将其显示在屏幕上:```mov ah, 06h ; 将06h存入AH寄存器int 21h ; 调用中断21hmov dl, al ; 将读取的字符存入dl寄存器mov ah, 02h ; 将02h存入AH寄存器int 21h ; 调用中断21h,显示字符```2. 字符串操作指令在汇编语言中,我们可以使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。

例如:- MOV:可以将一个字符串从一个内存地址复制到另一个内存地址- LEA:可以将一个字符串的地址加载到寄存器中- LDS:可以将一个段地址和偏移地址加载到DS和SI寄存器中下面是一个示例程序,可以将一个字符串从一个内存地址复制到另一个内存地址,并比较两个字符串是否相等:```mov si, offset str1 ; 将str1的偏移地址加载到SI寄存器中lea di, str2 ; 将str2的地址加载到DI寄存器中mov cx, length ; 将字符串长度加载到CX寄存器中copy_loop:lodsb ; 从SI指向的内存单元读取一字节数据,并自动将SI加1 stosb ; 将AL所包含的数据写入DI指向的内存单元,并自动将DI 加1loop copy_loop ; 循环执行,直至CX为0cmp str1, str2 ; 比较str1和str2是否相等je equal ; 如果相等,跳转到equal标签not_equal:; 如果不相等,执行一些操作jmp endequal:; 如果相等,执行一些操作end:```三、实验结果通过本次实验,我学会了如何在汇编语言中进行简单的输入输出和字符串操作。

汇编语言实验报告一.doc

汇编语言实验报告一.doc

汇编语言实验报告(实验一)一.实验目的1.掌握汇编语言程序的上机步骤;(1)用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)。

(2)用MASM程序产生OBJ文件。

(3)用LIINK程序产生EXE文件。

(4)程序的运行(用DEBUG或在DOS下直接运行)。

2.掌握DEBUG的使用方法。

二.程序说明1.在数据段DATA中有两个数据X和Y,假设X=1122H,Y=3344H,编程求两个字的和,结果存放到Z单元中。

2.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串传送到DEST_BUFFER开始的单元中。

3.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串向下移10个单元。

三.设计思想1、将1122H和3344H分别存放在双字x,y中,定义双字Z,x,y带进位相加放入Z中。

2、定义数据段source_buffer,把数据段地址放入ds寄存器,定义附加段extra_buffer,把附加段地址放入es寄存器,移动整个字符串。

3、定义数据段附加段,先移高位,这样要移20次。

四.程序代码1、DATA SEGMENTX DW 1122HY DW 3344HZ DW ?DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义开始DW 40 DUP(0)STACK ENDS ;堆栈段定义结束CODE SEGMENT ;代码段定义结束ASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段的开始地址MOV DX,XADC DX,YMOV Z,DXMOV AH,4CH ;返回DOCINT 21HCODE ENDSEND START2、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,EXTRAMOV ES,AXLEA SI,SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START3、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS, AXMOV AX, EXTRAMOV ES, AXLEA SI, SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START五.结果分析并回答:1.设计的程序包含了几个段第1段包含数据段、堆栈段、代码段第2、3个包含数据、附加段、代码段2.你的代码经过编译和连接之后,总共占用多少个字节第1、2个占30个字节,第3个占32个字节3.调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?程序1第一条指令:1454:000 BB4B14 MOV AX,144B最后一条指令:1451:001E 807F0400 CMP BYTE PTR [BX+04],00程序2第一条指令:1450:0000 1E PUSH DS最后一条指令:1450:001E 8B0? MOV AX,[BX]程序3第一条指令:144D:0000 1E PUSH DS最后一条指令:144D:0020 8B5702 MOV DX,[DX+02]。

汇编语言实验报告_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)冒泡排序也遇到一些困难。

调试结果:。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一汇编语言的源程序的输入一、实验目的1.通过实验了解和熟悉微机系统的配置2.学习在DEBUG状态下输入汇编源程序的方法3.初步掌握调试(在DEBUG状态下)的过程二、实验原理1.本实验在DEBUG状态下输入汇编源程序,并且用DEBUG命令进行调试,用单步跟踪的方法试验指令的功能;2.以下是给定的参考程序,并在实验时每条指令的“;”等号右边按要求填写指令的分析结果。

三、实验步骤1.开机后进入DOS系统2.用DEBUG的REGISTER命令检查所有寄存器内容,并作记录R[寄存器名]3.用DEBUG的ASSEMBLE命令输入汇编源程序A[内存地址]4.用DEBUG的UNASSEMBLE命令反汇编U[起始地址][终止地址]5.用DEBUG的TRACE命令单步跟踪程序T[起始地址][终止地址]6.用DEBUG的DUMP命令显示存贮器单元的内容四、参考程序及结果MOV AX,2000 ;AL=00MOV DS,AX ;DS=2000NOT AX ;AX=DFFFXOR AX,AX ;AX=0000DEC AX ;AX=FFFFINC AX ;AX=0000MOV BX,2030 ;BH=20MOV SI,BX ;SI=2030MOV [SI],BL ;[2030H]=30MOV WORD PTR[SI],10F ;[2030H]=0F [2030H]=01 MOV DI,SI ;DI=2030MOV [DI+50],BH ;[DI+50]=20MOV BH,[SI] ;BH=0FMOV BL,[DI+50] ;BL=20MOV SP,5000PUSH AX ;AX=0 [SS:4FFEH]=00H [SS:4FFFH]=00H PUSH BX ;BX=0F20 [SS:4FFCH]=20H [SS:4FFDH]=0FH POP AX ;AX=0F20POPF ;F=00000000NEG BX ;BX=F0E0XCHG BX,AX ;BX=0F20STD ;F=01010001STI ;F=01110001CLD ;F=00110001CLI ;F=00010001ADC DI,2050 ;DI=4081 F=00000010ADC SP,DI ;SP=9081 F=10010010ADC AX,1500 ;AX=05E0 F=00000001SUB AX,BX ;AX=F6C0 BX=0F20SHL AH,1 ;AH=ECRCL AX,1 ;AX=D981SHR BX,1 ;BH=07RCR BL,1 ;BL=90MOV CL,4MOV DX,80F0ROL DX,CL ;DX=0F08 CL=04INT 20 ;CS=00A7 IP=1072实验二数据的建立与传送程序一、实验目的1.学习DEBUG命令2.验证指令的功能二、实验原理在DEBUG状态下,输入程序,用G命令进行连续方式执行程序,用DUMP命令查看建立的数据块内容三、参考程序及结果1.在内存1000单元开始,建立00H~0FH~00H 31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小,程序从内存CS:0100H地址开始输入MOV AX ,100HMOV DS ,AXMOV SI,0MOV CL ,0FHXOR AX,AXPPE1: MOV [SI] ;ALINC SI ;INC ALDEC CLJNZ PPE1MOV CX,10HPPE2:MOV[SI],ALINC SIDEC ALLOOP PPE2INT 20H数据块的内容1000:0000:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:0100:0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 002.把上一程序的执行结果分几种方式传送到以下指定区域(a)该程序从内存CS:0150H开始输入,把数据块传送到15050H 开始的存储区域中MOV AX,1000HMOV DS,AXMOV SI,0MOV DI,5050HMOV CX,1FHPPEA: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP PPEAINT 20H结果:1000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(b)用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:0200H开始输入MOV AX,100HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5150HMOV CS,1FHCLDPPEB: MOVSBLOOP PPEBINT 20H结果:1000:5150 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5160 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(C)用重复串操作指令”REP MOVSB”把数据传送到15250H开始的区域,该程序从CS:250H地址开始输入MOV AX,1000HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5250HMOV CX,1FHCLDREPZMOVSBINT 20H结果:1000:5250 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5260 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(c)用串操作的减量工作方式,把数据传送到25050H开始的区域,该程序从CS:0300H开始输入MOV AX,1000HMOV DS,AXADD AX,AXMOV ES,AXMOV SI,1EHMOV DI,506EHMOV CX,1FHSTDREP MOVSBINT 20H结果:2000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 2000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00实验四统计学生成绩程序一、实验目的进一步掌握分支程序和循环程序的编写方法二、实验原理设有10个学生的成绩分别为56,69,84,82,73,88,99,63,100和80分。

汇编实验报告(适合初学者)

汇编实验报告(适合初学者)

汇编实验报告(适合初学者)汇编语言程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。

2.掌握简单汇编语言程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。

1.若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。

试编写汇编程序,完成Z<-((W-X)/5-Y)某(R+2)①.程序算法流程图。

开始初始化AL=(W-X)AL=(W-X)/5CL=(W-X)/5-YAL=(R+2)Z=((W-X)/5-Y)某(R+2)结束②.源程序清单。

DATASEGMENTXDB1H;数据定义YDB0HRDB3HWDB6HZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;段寄存器定义MOVAL,WSUBAL,X;求(W-X)CBW;字节转换为字MOVCL,5IDIVCL;(W-X)/5MOVCL,ALMOVAL,Y;(W-X)/5-YSUBCL,ALMOVAL,RADDAL,2;(R+2)IMULCL;((W-X)/5-Y)某(R+2)MOV[Z],AXADDAL,30H;输出结果MOVDL,AL;MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART③.程序运行结果。

④.调试过程中遇到的问题和解决的方法。

还未能实现动态的输入数据,对指令的不熟悉,以至于在程序中经常性出错,得掌握固定的程序功能。

2.试编写一个程序,测试数是否是奇数。

如该数是奇数,则把DL的第0位置1,否则将该位置0。

①.程序算法流程图。

开始AL=XAL右移一位得CF否CF==1是DL与000000001B相或DL与11111110B相与结束②.源程序清单。

DATASEGMENTXDB9H;数据定义DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;段寄存器定义MOVAL,XSHR AL,1;利用右移一位得到cf值,JB判断 JB NEXT;为1则为奇数ANDDL,11111110B;偶数DL第一个数置为0JMPEXITNEXT:ORDL,000000001B;奇数DL第一个数置为1EXIT:MOVAH,4CHINT21HCODEENDSENDSTART③.程序运行结果。

汇编语言实验报告

汇编语言实验报告

实验报告一:汇编语言实验基础一.实验目的:1. 熟悉汇编语言程序的开发过程以及汇编语言常用软件的使用方法2. 掌握DEBUG常用命令的使用方法二、实验内容:1.DEBUG 命令使用2.8088常用指令练习三、实验步骤:(一)DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符'_ '。

2、用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

4、用命令 F 110 11F 41 重复上二项实验,观察结果并比较。

5、用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H(5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。

8、用R命令将AX,BX内容改写为1050H及23A8H。

(二)8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序,特别注意左边的机器码。

3)用T命令逐条运行这些指令,注意有关寄存器及IP的变化情况。

并注意标志位有无变化。

2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。

汇编实验报告

汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入了解汇编语言的基本语法和编程结构,掌握汇编程序的编写、调试和运行过程,提高对计算机底层硬件的理解和操作能力。

二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与运算编写程序实现不同寄存器之间的数据传送。

进行简单的算术运算,如加法、减法、乘法和除法,并将结果存储在指定的寄存器或内存单元中。

2、逻辑运算与移位操作进行逻辑运算,包括与、或、非和异或操作。

实现移位操作,如左移和右移,并观察数据的变化。

3、分支与循环结构使用条件跳转指令实现分支结构,根据不同的条件执行不同的代码段。

运用循环指令实现循环操作,如计数循环和条件循环。

4、子程序调用编写子程序来完成特定的功能,如计算阶乘、查找最大值等。

在主程序中调用子程序,并传递参数和获取返回值。

四、实验步骤1、数据传送与运算打开 MASM 编程工具,新建一个汇编源文件。

使用 MOV 指令将数据从一个寄存器传送到另一个寄存器,例如:MOV AX, BX 。

进行加法运算,使用 ADD 指令,如:ADD AX, CX 。

进行减法运算,使用 SUB 指令,如:SUB DX, BX 。

乘法运算使用 MUL 指令,除法运算使用 DIV 指令,并将结果存储在合适的位置。

2、逻辑运算与移位操作在源文件中使用 AND 、OR 、NOT 和 XOR 指令进行逻辑运算,例如:AND AX, BX 。

对于移位操作,使用 SHL (左移)和 SHR (右移)指令,如:SHL AX, 2 表示将 AX 的值左移 2 位。

3、分支与循环结构使用 CMP 指令比较两个值,然后根据比较结果使用 JZ (等于零跳转)、JL (小于跳转)、JG (大于跳转)等条件跳转指令实现分支结构。

对于循环结构,使用 LOOP 指令实现计数循环,例如:MOV CX, 10 ;LABEL: ;LOOP LABEL 。

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

汇编语言程序设计实验报告
2.掌握汇编语言源程序的执行过程。
二、实验内容
P131作业29。
实验三子程序设计实验
一、实验目的
1.掌握汇编语言源程序子程序设计方法;
2.会使用CV软件工具。
二、实验内容
把实验二作为子程序,编写主程序来对能否构成三角形进行10判断。
实验四宏汇编程序设计实验
一、实验目的
1.掌握宏汇编程序编程技术及宏调用的方法;
2.主模块程序完成子程序的调用,及判断结果的显示,程序名为:ZHU.asm。
实验五混合程序的开发实验
一、实验目的
1.了解混合调用中的参数设置;
2.掌握混合调用的方法;
二、实验内容
P156第5题。
实验一单指令功能测试实验
一、实验目的
1.会使用DEBUG软件;
2.利用DEBUG单步执行功能测试指令的执行。
二、实验内容
判断从键盘输入的ASCII码数字,若是小于等于5,显示“C”,若是大于5显示“D”。假设输入的只可能是0~9数字。
实验二完整的汇编语言程序设计实验
一、实验目的
1.掌握完整的汇编语言源程序的设计方法;
实验五多模块程序设计实验
一、实验目的
1.掌握汇编段的属性的含义;
2.掌握利用LINK将多模块连接起来的方法;
3.掌握利用库文件将多模块连接起来的方法。
二、实验内容
假设内存单元中有三个字a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能,显示“Y”,否则,显示“N”;
具体要求:
1.三角形的判断程序为一模块子程序,程序名为:ABC.asm。入口参数:字节变量a、b、c。出口参数:字节变量d=1是三角形,d=0不是三角形。
2.了解COM文件的编程方法及特点;

汇编实验报告

汇编实验报告

实验三算术运算与代码转换程序设计一、实验目的1掌握算术运算程序的设计方法..2掌握代码转换程序的设计方法..3进一步掌握各种程序结构..4熟练掌握和使用用DEBUG调试程序..二、实验内容1编制两个多字节整数加法和减法程序;并将结果按十六进制形式显示在屏幕上..2编制程序实现二进制定点数与十进制数的ASCII码串之间转换;并将结果显示在屏幕上..3编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商;并以十进制形式输出..4写程序把从键盘输入的四位十六进制数转换为压缩的BCD码;并显示输出..5编写一通用过程用来将十进制数从键盘输入转换为P从键盘输入进制数..三、实验设备PC机一台四、实验步骤1 按程序流程图编制实验程序..2 输入源程序..3 汇编、连接程序;执行程序;检查结果..4 程序的执行可用DEBUG的G命令;也可用T命令单步跟踪执行..5 用D命令检查执行结果..六、源程序实验一DA TA SEGMENTNUM1 DB 22H;33H;44H;55H;66H;77H NUM1L DB 6HNUM2 DB 22H;22H;22H;22HNUM2L DB 4HOUTCOME1 DB 10H DUP0OUTCOME2 DB 10H DUP0N DB 0HDA TA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP0STACK1 ENDSCODE SEGMENTASSUME CS:CODE;DS:DATA;SS:STACK1 START:MOV AX;DA TAMOV DS;AXMOV CH;0MOV SI;OFFSET NUM1MOV DI;OFFSET NUM2MOV AH;NUM1LMOV AL;NUM2LCMP AH;ALJAE CHAXCHG SI;DIXCHG AH;ALCHA:SUB AH;ALMOV CL;ALCLCMOV BX;OFFSET OUTCOME1LOP1:MOV AL;DIPUSH CXMOV CL;SIADC CL;ALMOV BX;CLINC BXINC SIINC DIPOP CXLOOP LOP1MOV CL;AHLOP2:PUSH CXMOV CL; BYTE PTR SIADC CL;0MOV BX;CLPOP CXINC BXINC SILOOP LOP2LOP3:MOV CH;0MOV SI;OFFSET NUM1MOV DI;OFFSET NUM2MOV AH;NUM1LMOV AL;NUM2LCMP AH;ALJAE CHA1XCHG SI;DIXCHG AH;ALCHA1:SUB AH;ALMOV CL;ALCLCMOV BX;OFFSET OUTCOME2 LOP11:MOV AL;DIPUSH CXMOV CL;SISBB CL;ALMOV BX;CLINC BXINC SIINC DIPOP CXLOOP LOP11MOV CL;AHJCXZ LOP7LOP21:PUSH CXMOV CL; BYTE PTR SISBB CL;0MOV BX;CLPOP CXINC BXINC SILOOP LOP21LOP7:MOV DI;OFFSET OUTCOME1 ADD DI;10HLOP4: MOV DL;DIDEC DICMP N;0HJNE LOP5CMP DL;0HJE LOP9LOP5:PUSH DXPUSH CXMOV CL;4HSHR DL;CLPOP CXCMP DL;9HJBE LOP6ADD DL;7HLOP6:ADD DL;30HMOV AH;2INT 21HMOV N;1HPOP DXAND DX;0FHCMP DL;9HJBE LOP8ADD DL;7HLOP8:ADD DL;30HMOV AH;2INT 21HMOV DL;'H'MOV AH;2INT 21HLOP9:LOOP LOP4MOV N;0MOV DI;OFFSET OUTCOME2 ADD DI;10HMOV CX;11HLOP14: MOV DL;DIDEC DICMP N;0HJNE LOP15CMP DL;0HJE LOP19LOP15:PUSH DXPUSH CXMOV CL;4HPOP CXCMP DL;9HJBE LOP16ADD DL;7HLOP16:ADD DL;30HMOV AH;2INT 21HMOV N;1HPOP DXAND DX;0FHCMP DL;9HJBE LOP18ADD DL;7HLOP18:ADD DL;30HMOV AH;2INT 21HMOV DL;'H'MOV AH;2INT 21HLOP19:LOOP LOP14MOV AH;4CHINT 21HCODE ENDSEND START实验2DA TA SEGMENTTISHI1 DB 'Please enter the first number:';'$' TISHI2 DB 'Please enter the second number:';'$' JIA DB '+';'$'JIAN DB '-';'$'CHENG DB '*';'$'CHU DB '/';'$'DENG DB '=';'$'YU DB '......';'$'A DB 10B DW 10C DW 10000F DW 0HNUM1 DW 0HNUM2 DW 0HN1 DB 4HDA TA ENDSSTACK1 SEGMENT STACKDW 30H DUP0STACK1 ENDSCODES SEGMENTASSUME CS:CODES;DS:DATASTART:MOV AX;DA TAMOV DS;AXMOV DX;OFFSET TISHI1MOV AH;09HINT 21HLOOP2:MOV AX;NUM1MUL BMOV BX;AXMOV AH;1INT 21HCMP AL;0DHJE LOP1MOV NUM1;BXMOV AH;0SUB AL;30HADD NUM1;AXJMP LOOP2LOP1:MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV DX;OFFSET TISHI2MOV AH;09HINT 21HLOOP1:MOV AX;NUM2MUL BMOV BX;AXMOV AH;1INT 21HCMP AL;0DHJE LOP3MOV NUM2;BXMOV AH;0SUB AL;30HADD NUM2;AXJMP LOOP1LOP3:MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP6:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP7MOV F;AXJMP LOP6LOP7:MOV CL;NMOV CH;0LOP16:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP16MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET JIAMOV AH;09H INT 21HLOOOP6:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP7MOV F;AXJMP LOOOP6LOOOP7:MOV CL;NMOV CH;0LOOOP16:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP16MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0LOOP3:MOV AX;NUM1ADD AX;NUM2MOV F;AXLOOP4:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP5MOV F;AXJMP LOOP4LOOP5:MOV CL;NMOV CH;0LOOP0:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP0MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP61:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP71MOV F;AXJMP LOP61LOP71:MOV CL;NMOV CH;0LOP161:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP161MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET JIANMOV AH;09H INT 21H LOOOP61:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP71MOV F;AXJMP LOOOP61LOOOP71:MOV CL;NMOV CH;0LOOOP161:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP161MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0MOV N;0MOV AX;NUM1SUB AX;NUM2MOV F;AXAND AX;10000000BCMP AX;10000000BJNE LOOP6NEG FLOOP6:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP7MOV F;AXJMP LOOP6LOOP7:MOV CL;NMOV CH;0LOOP16:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP16MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP62:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP72MOV F;AXJMP LOP62LOP72:MOV CL;NMOV CH;0LOP162:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP162MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET CHENGMOV AH;09HINT 21HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP72MOV F;AXJMP LOOOP62LOOOP72:MOV CL;NMOV CH;0LOOOP162:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP162MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0MOV AX;NUM1MUL NUM2DIV CPUSH DXMOV F;AXMOV N;0LOOP8:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP9MOV F;AXJMP LOOP8LOOP9:MOV CL;NMOV CH;0LOOP17:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP17MOV N;0POP FMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP11MOV F;AXJMP LOOP10LOOP11:MOV AL;NCMP AL;4HJE LOOP20MOV AL;4HSUB AL;NMOV CL;ALMOV CH;0LOOP19:MOV DX;'0'MOV AH;2INT 21HLOOP LOOP19LOOP20:MOV CL;NMOV CH;0LOOP18:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP18MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP64:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP74MOV F;AXJMP LOP64LOP74:MOV CL;NMOV CH;0LOP164:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP164MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET chuMOV AH;09HINT 21HLOOOP64:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP74MOV F;AXJMP LOOOP64LOOOP74:MOV CL;NMOV CH;0LOOOP164:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP164MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0MOV AX;NUM1MOV DX;0DIV NUM2PUSH DXMOV F;AXMOV N;0LOOP15:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP12MOV F;AXJMP LOOP15LOOP12:MOV CL;NMOV CH;0LOOP21:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP21MOV DX;OFFSET YUMOV AH;09HINT 21HPOP FMOV N;0LOOP13:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP14MOV F;AXJMP LOOP13LOOP14:MOV CL;NMOV CH;0HLOOP22:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP22MOV AH;4CHINT 21HCODES ENDSEND START实验五输入输出程序设计一、实验目的1 掌握输入输出程序的编写方法..2 熟悉系统功能调用的方法..3 熟悉动画程序的编写方法..二、实验内容1在CRT上每隔一秒连续显示字符0-9..编程提示为了使输出的字符之间有空格;在每一个循环中输出一个0-9的字符和一个空格..为了输出0-9;置寄存器BL初值为0;每循环一次使其增量..为了保证输出是十进制;增量后用DAA调整指令..由于输出为一位十进制数;用AND 0FH 指令屏蔽高4位..2用系统功能调用将‘HELLO’由键盘输入;再从屏幕输出‘***HELLO***’..3编制在屏幕上画线的子程序;调用该子程序画一矩形..4编制字母下落一行的子程序;调用该子程序使字母从屏幕顶部下落到底部..5创建一磁盘文件;保存从键盘输入的字符串..6编写程序用设置系统时间;首先从键盘以十进制数形式输入时间;然后修改系统时间;并重新以十进制形式显示时间..7编写程序将屏幕分割成格状;每一格涂上不同颜色;格数从键盘输入..8编写程序在屏幕上显示菜单;输入相应菜单的序号后;选种该菜单项..三、实验设备PC机一台四、实验步骤1 按程序流程图编制实验程序..2 输入源程序..3 汇编、连接程序;执行程序;检查结果..4)程序的执行可用DEBUG的G命令;也可用T命令单步跟踪执行..五、源程序实验五EXAM5-1STACK SEGMENT STACKDB 1024 DUP0STACK ENDSCODE SEGMENTASSUME CS:CODE;SS:STACKSTART:MOV BL; 0LP:MOV DL; 20HMOV AH; 2INT 21HMOV AL; BLADD AL; 0DAAAND AL; 0FHMOV BL; ALPUSH BXOR AL; 30HMOV DL; ALMOV AH; 2INT 21HMOV BX; 3E8HLP2:MOV CX; 176H ;延时1msLP1:PUSHFPOPFLOOP LP1DEC BXJNZ LP2POP BXINC BLJMP LPCODE ENDSEND START执行程序EXAM5-1·EXE;屏幕上依次循环显示一个数字一个空格:0 1 2 3 4 5 6 7 8 9 ……实验五EXAM5-2STACK SEGMENT STACKDB 1024 DUP0STACK ENDSDATA SEGMENTBUFF DB 6;7 DUP ;‘$’DATA ENDSINPUT MACRO BUFEMOV DX; OFFSET BUFEMOV AH; 0AHINT 21HENDMPUTCHAR MACRO CHARMOV DL; CHARMOV AH; 02HINT 21HENDMCODE SEGMENTASSUME CS:CODE;DS:DA TA;SS:STACK START:MOV AX; DATAMOV DS; AXINPUT BUFF ;读取字符串➝BUFFPUTCHAR 0DHPUTCHAR 0AH ;光标另起一行MOV CX; 0003HNEXT:PUTCHAR 2AHLOOP NEXTMOV CL; BUFF+1SUB CH; CHMOV BX; OFFSET BUFF+2BEGIN:MOV AL; BXPUTCHAR ALINC BXLOOP BEGINMOV CX; 0003HNEXT1:PUTCHAR 2AHLOOP NEXT1MOV AH; 4CHINT 21HCODE ENDSEND START执行程序EXAM5-2·EXE;输入HELLO↙屏幕上显示结果:*** HELLO ***实验五 EXAM5-5NAME EXAM6SSTACK SEGMENT STACK ’stack’DB 1024 DUPSSTACK ENDSDATA SEGMENTASKNAME DB 0DH;0AH;’Enter the’DB ’dest file name:$’ASKCONT DB 0DH;0AH;’Enter the string’DB ’as file content:’0dh;0ah;’$’ FILEBUF DB 62;63DUPHAND_D DWMSGMER DB 0DH;0AH;0AHDB ’Directory full’;0DH;0AH;’$’ MSGWER DB 0DH;0AH;0AHDB ’Disk full’;0DH;0AH;’$’ MSGSUC DB 0DH;0AH;0AH;DB ’Write file is Successful’DB 0DH;0AH;’$’DATA ENDSDISPLY MACRO TEXTMOV DX;OFFSET TEXTMOV AH;09HINT 21HENDMCRHAND MACRO PATH;ATTRMOV DX;OFFSET PATH ;文件名MOV CL;ATTR ;文件属性XOR CH;CHMOV AH;3CHINT 21HENDMWRHAND MACRO HAND;BUFF;BYTEMOV BX;HANDMOV DX;OFFSET BUFFADD DX;2MOV CL;BYTEXOR CH;CHMOV AH;40HINT 21HENDMCLHAND MACRO HANDMOV BX;HANDMOV AH;3EHINT 21HENDMCODE SEGMENTPROG PROC FARASSUME CS:CODE;DS:DATA;SS:SSTACKPUSH DSMOV AX;0PUSH AXMOV AX;DATAMOV DS;AXDISPLY ASKNAME ;提示输入文件名MOV DX;OFFSET FILEBUFMOV AH;0AHINT 21HMOV DI;OFFSET FILEBUF2MOV BL;FILEBUF1XOR BH;BHMOV BYTE PTRBXDI;00HCRHAND FILEBUF2;0 ;创建并打开新文件JC CRTERRMOV HAND_D;AX ;存文件句柄DISPLY ASKCONT ;提示键入文件内容MOV DX;OFFSET FILEBUFMOV AH;0AHINT 21HWRHAND HAND_D;FILEBUF;FILEBUF1JC WRITERRCLHAND HAND_DDISPLY MSGSUCJMP EXITCRTERR:DISPLY MSGMERJMP EXITWRITERR:DISPLY MSGWEREXIT:RETPROG ENDPCODE ENDSEND PROG。

汇编实验报告一实验总结

汇编实验报告一实验总结

汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。

实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。

随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。

在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。

实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。

我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。

同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。

实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。

通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。

希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。

汇编实验报告

汇编实验报告

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

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

2.实验方法与步骤:(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:Mov ah,02hMov dl,输出字符的ASCLL码Int 21h把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASCLL码。

(2)显示空白符时,用其ASCLL码0置入dl寄存器。

每行结束时,用显示回车(ASCLL 为0dH)和换行符(ASCLL为0aH)来结束本行并开始下一行。

(3)由于逐个显示相继的ASCLL字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCLL字符。

具体的用法是:在显示空白或回车、换行符前用指令Push dx把dl的内容保存到堆栈中去。

在显示空白或回车、换行符后用指令Pop dx恢复dl寄存器的原始内容。

3.程序代码DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码main proc farASSUME CS:CODESpush dssub ax,axpush axmov bl,15;输出15行mov dl,10hloo:mov cx,16next:mov ah,02hint 21hinc dlpush dx;********每行16个字母mov dl,0mov ah,02hint 21hpop dxloop nextpush dx;***********回车换行mov dl,0dhmov ah,02hint 21hmov dl,0ahmov ah,02hint 21hpop dxdec blcmp bl,0jne looje exitexit: MOV AH,01hINT 21hMOV AX, 4chINT 21hmain endpMOV AH,4CHINT 21HCODES ENDSEND4.实验结果5.分析与结论程序的主体是一个简单的循环输出,包含内外两个循环,一个是每行内16个字符的循环输出,一个是总行数15行的循环输出。

汇编语言编程实验报告

汇编语言编程实验报告

汇编语言编程实验报告汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。

二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。

六、实验六: (19)七、汇编实验总结 (23)实验一一.实验题目【汇编语言补充作业T20】编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。

二.程序流程及思路实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;3、在输入的字符串尾加上‘$’字符,以作为输出结束条件。

实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;2、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。

三.源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;缓冲区字符的最大长度ACTLEN DB ? ;实际字符个数STRING DB N DUP(?) ;字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行MOV BL,MAXLEN+1 ;取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$ MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START四.结果拷屏实验二一. 实验题目【汇编语言补充作业T23】假设CX:BX中存放了4为非压缩的BCD码表示的十进制数4386,请编写完整程序将这个数转化成2进制数并存放到DI寄存器中。

汇编语言编程实验报告

汇编语言编程实验报告

汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。

编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。

二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。

)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。

4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。

如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。

一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。

将包含QE文件的工作磁盘插入驱动器A:。

进入QEA\QE进入全屏幕后可以开始编程。

文件名取为Myprog。

asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。

汇编器实验报告

汇编器实验报告

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

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

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

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

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

DATA SEGMENTBUFDB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: PUSH DSXOR AX,AXPUSH AXMOVAX,DATAMOV DS,AXMOV BX,OFFSET BUF MOV 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图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。

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

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

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

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

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。

若相同’,否则显示‘No match’。

则显示‘Match在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1’和‘Nomatch’。

再代码段比较字符串string1和string2,和mess2,分别代表‘Match通过比较判断是否相同。

若相同则显示‘Match’,否则显示‘No match’。

二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。

再用Debug进行调试。

其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存用器和修改寄存器的值,-q命令用来退出debug程序。

在这些命令的后面加上地址,可以将命令执行到相应的地方。

如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:若将string2改为'Move the cursor backwards.',程序的其他部分不做改动,执行结果:若将mov cx,25语句改成mov cx,24,结果为:此时少做了一次循环,得到的结果就不正确了。

实验二、用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、程序说明本实验包括两个部分,第一个部分是将AX和BX的内容进行交换,并用堆栈作为两寄存器交换内容的中间存储单元;第二部分是用DEBUG的命令将存储器偏移地AH, 0BH,0CH,0DH,0EH。

在DEBUG状态址300H,304H连续单元顺序装入0 下送入给出的程序中。

第一个程序先将AX的内容进栈,然后将BX的内容赋给AX,再将出栈的内容赋给BX即可。

第二个程序是在进入debug后,用-a指令输入给出的程序,然用-r指令安要求修改内存的内容,再用-t指令逐步执行每条指令,看修改的内存内容对指令执行结果的影响。

汇编实验报告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)。

XI`AN TECHNOLOGICAL UNIVERSITY 实验报告西安工业大学实验报告一、实验目的1、学习和掌握利用TD-TIPE连机软件调试汇编程序。

2、了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。

二、实验原理基本输入输出实验。

编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。

要求只要开关拨动,数据灯的显示就改变。

三、实验步骤、数据记录及处理1.步骤:(1)硬件测试;(2)获得端口地址;(3)写出源程序,2.源代码(1)程序一SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DX, 0646HMOV AL, 90HOUT DX, ALAA1:MOV DX, 0640HIN AL, DXCALL DELAYMOV DX, 0642HOUT DX, ALJMP AA1DELAY:PUSH CXMOV CX, 0F00HAA2:PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START(2)程序二SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DX, 0646HMOV AL, 90HOUT DX, ALAA1:MOV DX, 0640HIN AL, DXXOR AL, 00F0HCALL DELAYMOV DX, 0642HOUT DX, ALJMP AA1DELAY:PUSH CXMOV CX, 0F00HAA2:PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START(3)程序三SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DX, 0646HMOV AL, 90HOUT DX, ALAA1:MOV DX, 0640HIN AL, DXTEST AL,10000000BJZ OUT1JNZ OUT2OUT1:TEST AL,01000000BJZ OUT3MOV AL,00001111BJMP OUT0OUT2:TEST AL,01000000BJZ OUT4MOV AL,11111111BJMP OUT0OUT3:MOV AL,00000000BJMP OUT0OUT4:MOV AL,11110000BJMP OUT0OUT0:OUT DX, ALCALL DELAYMOV DX, 0642HOUT DX, ALJMP AA1DELAY:PUSH CXMOV CX, 0F00HAA2:PUSH AXPOP AXLOOP AA2POP CXRET3.实验现象描述(1)开关拨上、对应灯亮,开关拨下、对应灯灭;(2)K01—K04开关拨上、对应灯亮,开关拨下、对应灯灭。

而K05—K08开关拨上、对应灯灭,开关拨下、对应灯亮;(3)同时将K06与K07开关置为低电平,所有数据灯均不亮;同时将K06与K07开关置为高电平,所有数据灯均亮;将K06置为低电平,K07置为高电平,所有红数据灯均亮,所有绿数据灯均不亮;将K06置为高电平,K07置为低电平,所有红数据灯均不亮,所有绿指示灯均亮。

西安工业大学实验报告一、实验目的1. 掌握 8254 的工作方式及应用编程。

2. 掌握 8254 典型应用电路的接法。

二、实验原理编写程序,将8254的计数器0设置为0/3/2,计数值为十进制5,用微动开关KK1作为CLK始终,OUT0连接INTR,每当KK1按动5次后产生中断请求,在屏幕上显示‘M’。

三、实验步骤、数据记录及处理1.步骤:(1)计数应用实验1)按实验接线图接好电路2)编写实验程序,经编译、链接无误后装入系统3)运行程序,按动 KK1+产生单次脉冲,观察实验现象4)改变计数值,验证 8254 的计数功能(2)定时应用实验1)按实验接线图接好电路2)根据实验内容,编写实验程序,经编译、链接无误后装入系统3)单击按钮,运行实验程序,8254的OUT1 会输出1s的方波4)用示波器观察波形的方法:单击虚拟仪器菜单中的按钮或直接单击工具栏的按钮,在新弹出的示波器界面上单击按钮运行示波器,就可以观测出 OUT1 输出的波形2.源代码(1)计数应用实验A8254 EQU 06C0HB8254 EQU 06C2HC8254 EQU 06C4HCON8254 EQU 06C6HSSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACKSTART: PUSH DSMOV AX, 0000HMOV DS, AXMOV AX, OFFSET IRQ7MOV SI, 003CHMOV [SI], AXMOV AX, CSMOV SI, 003EHMOV [SI], AXCLIPOP DSMOV AL, 11HOUT 20H, ALMOV AL, 08HOUT 21H, ALMOV AL, 04HOUT 21H, ALMOV AL, 01HOUT 21H, ALMOV AL, 6FHOUT 21H, ALMOV DX, CON8254MOV AL, 10HOUT DX, ALMOV DX, A8254MOV AL, 04HOUT DX, ALSTIAA1: JMP AA1IRQ7: MOV DX, A8254MOV AL, 04HOUT DX, ALMOV AX, 014DHINT 10HMOV AX, 0120HINT 10HMOV AL, 20HOUT 20H, ALIRETCODE ENDSEND START(2)定时应用实验1)宽度为1s的方波A8254 EQU 0600HB8254 EQU 0602HC8254 EQU 0604HCON8254 EQU 0606HSSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX, CON8254MOV AL, 36HOUT DX, ALMOV DX, A8254MOV AL, 0E8HOUT DX, ALMOV AL, 03HOUT DX, ALMOV DX, CON8254MOV AL, 76HOUT DX, ALMOV DX, B8254MOV AL, 0E8HOUT DX, ALMOV AL, 03HOUT DX, ALAA1: JMP AA1CODE ENDSEND START2)宽度为2.5s的方波A8254 EQU 0600HB8254 EQU 0602HC8254 EQU 0604HCON8254 EQU 0606HSSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX, CON8254MOV AL, 36HOUT DX, ALMOV DX, A8254MOV AL, 0E8HOUT DX, ALMOV AL, 03HOUT DX, ALMOV DX, CON8254MOV AL, 76HOUT DX, ALMOV DX, B8254MOV AL, 0E8HOUT DX, ALMOV AL, 08HOUT DX, ALAA1: JMP AA1CODE ENDSEND START3.实验截屏(1)计数应用实验每当按动‘KK1+’5 次后,产生一次计数中断,并在屏幕上显示一个字符‘M’(2)定时应用实验在屏幕上显示一个 1s 的方波西安工业大学实验报告一、实验目的1. 学习并掌握 8255 的工作方式及其应用;2. 掌握 8255 典型应用电路的接法;3. 掌握程序固化及脱机运行程序的方法。

二、实验原理8255A的A口作为输入口,与逻辑电平开关相连。

8255A的B口作为输出口,与发光二极管相连。

编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。

三、实验步骤、数据记录及处理1.步骤:(1)按图连接实验线路图。

(2)编写实验程序,经编译、链接无误后装入系统;(3)运行程序,观察 LED 灯的显示,验证程序功能;(4)自己改变流水灯的方式,编写程序;(5)固化程序并脱机运行2.源代码:(1)SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START:MOV DX, 0646H MOV AL, 80H OUT DX, AL MOV BX, 8001H AA1:MOV DX, 0640H MOV AL, BH OUT DX, AL ROR BH, 1 MOV DX, 0642H MOV AL, BL OUT DX, AL ROL BL, 1 CALL DELAY CALL DELAY JMP AA1 DELAY:PUSH CXMOV CX, 0F000H AA2:PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START(2)SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DX, 0646HMOV AL, 80HOUT DX, ALMOV BX, 8001HAA1:MOV DX, 0640HMOV AL, BHOUT DX, ALROR BH, 7MOV DX, 0642HMOV AL, BLOUT DX, ALROL BL, 7CALL DELAYCALL DELAYJMP AA1DELAY:PUSH CXMOV CX, 0F000HAA2:PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START(3)SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSMY_DATA SEGMENTNUMBER1 DB 18H,24H,42H,81HMY_DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:MY_DATASTART:MOV AX, MY_DATAMOV DS, AXMOV DX, 0646HMOV AL, 80HOUT DX, ALINIT: MOV CX, 4LEA DI, NUMBER1 AA1: MOV DX, 0642HMOV AL, [SI]INC SIOUT DX, ALMOV DX, 0640HMOV AL, [DI]INC DIOUT DX, ALCALL DELAYCALL DELAYLOOP AA1JMP INITDELAY: PUSH CXMOV CX, 0F000HAA2: PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START(4)SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSMY_DATA SEGMENTNUMBER1 DB 18H,24H,42H,81HNUMBER0 DB 81H,42H,24H,18HMY_DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:MY_DATA START:MOV AX, MY_DATAMOV DS, AXMOV DX, 0646HMOV AL, 80HOUT DX, ALINIT: MOV CX, 4LEA SI, NUMBER0LEA DI, NUMBER1AA1: MOV DX, 0642HMOV AL, [SI]INC SIOUT DX, ALMOV DX, 0640HMOV AL, [DI]INC DIOUT DX, ALCALL DELAYCALL DELAYLOOP AA1JMP INITDELAY: PUSH CXMOV CX, 0F000HAA2: PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START3.实验现象描述:(1)数据灯D7~D0 由右向左,每次仅亮一个灯,循环显示;(2)数据灯D7~D0 由左向右,每次仅亮一个灯,循环显示;(3)数据灯D7~D4 由右向左,每次仅亮一个灯,循环显示;数据灯D3~D0 由左向右,每次仅亮一个灯,循环显示;(4)数据灯D7~D4 由右向左,每次仅亮一个灯,循环显示;数据灯D3~D0 由左向右,每次仅亮一个灯,循环显示。

相关文档
最新文档