汇编实验报告
汇编语言指令及伪指令练习的实验报告总结(范文)
汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 201X~201X学年第二学期实验项目列表福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _1#605 实验设备号: I3 实验时间:201X.4.25指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看L ST文件;(3)生成BJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验环境 IBM—PC机及其兼容机;实验的软件环境是:操作系统: DS2.0以上;调试程序: DEBUG.CM;文本编程程序: EDIT.EXE、PS.EXE;宏汇编程序:MA SM.EXE(或AS M .EXE);连接装配程序:L INK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名 1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDI T查看1.LS T文件。
试回答: DA1,DA2的偏移量分别是多少?C UNT的值为多少?DATA SEGME NT RG 20HNUM1=8 NUM2=NUM1+10H DA1 DB ‘I BM PC’ CUN T EQU $-DA1 DATA END S DA2 DB 0AH, 0DH EN D(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)D ATA SEGMEN T VAR1 DB0, 25, DH,300 VAR2DB 12H, A4H, 6BH VAR3 DB ’ABCD EF’ VAR4 D 1H, 5678H VAR5 D 10H DUP(?) D ATA ENDS C DE SEGMENT ASSUME CS: CDE, DE: DATA MV D S, AX LEASI, VAR5 M V BX, FFSE T VAR2 MV[SI], 0ABH MV AX, VA R1+2 MV [B X], [SI] M V VAR5+4,VAR4 MV AH, 4CH INT21H ENDS E ND START B EING MV AX, DATA CDE(3)输入正确的程序,汇编、连接、运行 STACKS SEGMENT S TACK D 128DUP(?) EN DS SEGMENT ENDS SEGM ENT ASSUME CS: CDES,DS: DATAS STACKS DA TAS DATASCDES STRIN G DB ‘ELCM E!’, 13, 10, ‘$’ STA RT: MV AX, DATAS MV DS, AX LEA DX, S TRING MV A H, 9 INT 21H MV AH,4CH INT 21H CDES END S END STAR T4.算法描述及实验步骤 1)首先,用记事本输入各段程序,并储存成源程序,保存在MASM目录下。
汇编实验报告七
计算机组成与汇编语言实验报告
通过结果说明程序运行结果正确。
2.调试程序2的运行结果如下。
说明程序实现的功能是查找0第一次出现的位置。
通过结果说明程序运行结果正确。
1.编写程序1运行结果如下。
4.编写程序2运行结果如下。
5.编写程序3运行结果如下。
实验情况与体会:通过本次上机实验,学习了数值转换。
实验过程中,遇到很多问题,比如程序一的编写,基本上都是学习书本以及依靠书本多做题才编出来的,仅有的几次上机实验,要抓紧时间学习和交流,时间挺少的。
在今后的学习和生活中,我们都需要相互学习、相互交流,共同进步。
学习是一个循序渐进的过程。
通过这次实验,使我了解到运行调试程序的不易,今后一定更加努力,把程序做到最好!对于不足之处,会积极改正。
汇编语言实验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. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编试验报告
院系:计算机科学学院专业:计算机科学与技术年级: 07级课程名称:汇编语言学号:姓名:指导教师:2008年 12 月 15 日程序源代码:一:大小写字母字符转换; Assembly language program -- converting between uppercase and lowercase ; Author: senhe zhang; Date: revised 10/2008.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORDINCLUDE io.h ; header file for input/outputcr EQU 0dh ; carriage return characterLf EQU 0ah ; line feed.STACK 4096 ; reserve 4096-byte stack.DATA ; reserve storage for dataprompt byte cr,Lf,"enter a character: ",0string byte 3 DUP (?)labell byte "through converting the latter letter is: ",0value byte 3 DUP (?)byte cr,Lf,0errorprompt byte "It doesn't belong to letter characters,please input again:",0 .CODE ; start of main program code_start:whilepos: output promptinput string, 3 ;read ASCII charactersoutput labelloutput valuejmp quitmov al,string ;Placed in the alcmp al,cr ;Enter compared with theje quit ;If equal to exitcmp al,'a' ;And 'a' comparisonjl if_1 ;Implementation if-1 if lesscmp al, 'z'jg if_1 ; Implementation if-1 if biggersub al,20h ;al-20hmov value,alif_1: cmp al,'A'jl if_2cmp al,'Z'jg if_2add al, 20hmov value, aloutput labelloutput valuejmp quitif_2: output errorprompt ;Errorjmp whileposquit: INVOKE ExitProcess, 0 ; exit with return code 0PUBLIC _start ; make entry point publicEND ; end of source code二:九九乘法表; assembly language program -- adds two numbers; Author: senhe zhang; Date: revised 10/2008.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.h ; header file for input/outputcr EQU 0dh ; carriage return characterLf EQU 0ah ; line feedspace EQU 20h.STACK 4096 ; reserve 4096-byte stack .DATA ; reserve storage for data;value word ?currentrow dword ?currentque dword ?mulx byte 11 DUP (?)byte 0labell2 byte cr,Lf,0labell byte '*',0muly byte 11 DUP (?),0labell3 byte '=',0value byte 11 DUP (?)byte space,0.CODE ; start of main program code _start:mov currentrow, 1mov currentque, 1whilepos: mov eax, currentrowcurrentquedtoa value, eaxmov eax, currentrowdtoa mulx, eaxmov eax, currentquedtoa muly, eaxoutput mulx+10output labelloutput muly+10output labell3output value+9mov ecx, currentquecmp currentrow, ecxje while_2while_1: inc currentquejmp whileposwhile_2: output labell2inc currentrowmov ecx, 9cmp currentrow, ecxjg quitmov edx, currentrowmov currentque, 1cmp currentque, edxjle whileposquit: INVOKE ExitProcess, 0 ; exit with return code 0 PUBLIC _start ; make entry point public END ; end of source code 三:求给定整数的所有素因子; program to get all the prime numbers of a integer; Author: senhe zhang.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.h ; header file for input/outputcr EQU 0dh ; carriage return characterLf EQU 0ah ; line feedMAX EQU 100 ; the max number.STACK 4096 ; reserve 4096-byte stack.DATA ; reserve storage for datanumber DWORD ?index DWORD ?j DWORD ?flag1 BYTE ?flag2 BYTE ?prompt0 BYTE "Please input an integer:",0prompt1 BYTE cr,lf,cr,lf,"The result is: ",0 count WORD ?value BYTE 11 DUP(?)BYTE 0sign BYTE ?BYTE 0.CODE ; start of main program codePROCA PROC NEAR32 ; To determine prime numbers mov flag1,0 ;0 to preserve the flag1mov index,1 ;1 to save the indexFORA:inc index ;dec Automatic increasemov eax,index ;Index will be saved to go in eaxcmp eax,ecx ;Eax allow comparison with the ecxjnl ENDA ;If more than that to jump ENDAmov eax,ecxmov ebx,indexCdq ;The expansion of dividenddiv ebxcmp edx,0jne FORA ;If they are not, to jump FORAjmp ENDAA ;Jump to ENDAAENDA: mov flag1,1ENDAA:retPROCA ENDP ;The end of the subroutinePROCB PROC NEAR32mov flag2,0MORE:cmp number,1je ENDBAmov eax,numbercdqdiv indexcmp edx,0jne ENDBBmov number,eaxinc countcmp count,1je PRINTNmov sign,'*'output signPRINTN:dtoa value,indexcall PROCCjmp MOREENDBA:mov flag2,1ENDBB:retPROCB ENDPPROCC PROC NEAR32lea ebx,valueWHILEA: mov al,byte ptr [ebx]inc ebxcmp al,0je ENDCcmp al,20hje WHILEAmov sign,aloutput signjmp WHILEAENDC: retPROCC ENDP_start:output prompt0 ;The main function to startinput value,11output prompt1mov sign,'='output valueoutput signatod valuemov number,eaxmov count,0mov j,1NF1:inc jmov ecx,jcall PROCAcmp flag1,1jne NF1call PROCBcmp flag2,1jne NF1ENDFILE:INVOKE ExitProcess, 0 ; exit with return code 0PUBLIC _start ; make entry point public END四:字符串中指定字符的替换; This program is to get the letter before and after the one you put in; Author: senhe zhang.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORDINCLUDE io.h ; header file for input/outputcr EQU 0dh ; carriage return characterLf EQU 0ah ; line feed.STACK 4096 ; reserve 4096-byte stack.DATA ; reserve storage for dataprompt1 BYTE "This programe will exchange A to a"BYTE "Please input string: ",0prompt2 BYTE "The result is: "string BYTE 50 DUP(?).CODE ; start of main program code_start:output prompt1 ;A replacement is prompt1 output and a string of liesinput string,50 ; read ASCII characterslea ebx,string ;find length of stringa: cmp byte ptr [ebx],0dh ;String of characters in each carriage return character and compare je end1 ;Is equal to the outputcmp byte ptr [ebx],41h ;Each string of characters with the 'A' character comparisonje change ;Is equal to the conversionb: inc ebx ;Compared to the next characterjmp achange: mov byte ptr [ebx],61h ;Converted to 'a'jmp bend1:output prompt2 ;OutputINVOKE ExitProcess, 0 ; exit with return code 0PUBLIC _start ; make entry point publicEND ;end of source code五:使用位操作指令实现双字类型数的高低字转换; Author: senhe zhang; Date: revised 10/2008.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORDINCLUDE io.hcr EQU 0dhLf EQU 0ah.STACK 4096.DATAprompt BYTE "Input a number: ",0number BYTE 20 dup (?)result BYTE cr,Lf,"The 2's complement representation is: "hexout BYTE 8 DUP(?),cr,Lf,0prompt2 BYTE "After the shift ",cr,lf,0.CODEHex PROC NEAR32 ;Hex sub: output of a 16-digit hexadecimal numberpush eaxlea ebx,hexout+7mov ecx,8mov esi,eaxforcount: mov edx,eaxand edx,0000000fh ;28 figures on the left side of Clear, and the remaining unchangedcmp edx,9jnle elseLetteror edx,30h ;Converted to ASCII codejmp endifDigitelseLetter:add edx,'A'-10 ;Converted to lettersendifDigit:mov BYTE PTR [ebx],dldec ebxshr eax,4 ;Right Shiftloop forcountoutput resultpop eaxretHex ENDP_start:output promptinput number,16 ;A digital inputatod numbercall Hex ;Subroutine calls Hexrol eax,16 ;Circle left shiftoutput prompt2 ;Output converted hexadecimal numbercall HexINVOKE ExitProcess, 0PUBLIC _startEND。
汇编实验一实验报告
汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。
输入“Q ” 退出程序。
再次启动Debug。
输入“r ”来显示CPU的当前状态和寄存器中的当前内容。
输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。
输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。
输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。
判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。
观察与前面的数据有无不同。
输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。
比较其中2000:0000 段中的数据。
相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。
输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。
输入“u ”来显示程序段中的指令序列。
然后输入“d CS:100 ” 来显示代码段中的数据。
观察显示内容。
“u CS:100 106 ”做反汇编,就是显示出汇编语句。
将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。
注意,跟踪程序前,要让IP 寄存器中的值是100H。
一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。
汇编语言实验报告一.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
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
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常用命令的使用方法二、实验内容: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 。
汇编实验报告
实验三算术运算与代码转换程序设计一、实验目的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。
汇编实验报告一实验总结
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
汇编实验一 实验报告
实验一查看CPU和内存用机器指令和汇编指令编程
一、实验目的
1.掌握debug的使用方法,会用基本的D,R命令查看、显示内存和寄存器
2.了解汇编指令编程的方法。
二、实验任务
1检查在存储器低端的BIOS数据区的内容。
(1)检查串行与并行端口
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2 考察ROM BIOS
目的:检查在存储器高端的ROM BIOS中的数据。
(1)检查版本通告
(2)检查ROM BIOS数据
3.用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改。
三、实验结果及分析
1、检查在存储器低端的BIOS数据区的内容
(1)检查串行与并行端口
说明:检查后发现有四个串行端口,分别是03F8、02F8、03E8、02E8;并行端口也有四个,分别是03BC、03BC、0378、0278、9FC0
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2、考察ROM BIOS (1)检查版本通告
(2)检查ROM BIOS数据
3、用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改
四、实验总结(心得、体会)
1、通过对检查在存储器低端的BIOS数据区的内容的查看,可以了解计算机的各种状态,而考察ROM BIOS可以鉴定计算机的出厂信息。
2、通过用D、R命令查看、显示内存和寄存器,可以了解计算机运行的过程步骤,并且可以通过偏移地址读取内容。
3、在读取时需要注意的是,在DEBUG显示中是低位至高位的显示,而我们需要的是高位至低位的显示方式,所以在操作时对于双字节的读取,需要将前后字节地址内容互换。
汇编语言编程实验报告
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的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.了解汇编语言的基本概念和基本语法。
2.掌握常见汇编指令的使用方法。
二、实验器材1.计算机一台。
2.汇编语言开发环境。
三、实验原理和方法1.汇编语言是低级程序语言,是计算机可以直接识别并执行的语言。
2.汇编语言采用助记符表示计算机指令,并且每一条汇编指令都对应一条机器指令。
四、实验过程及结果1.编写一个汇编程序,实现将两个数相加并输出结果的功能。
2.打开汇编语言开发环境,创建一个新的源文件。
3.在源文件中编写汇编程序,并保存。
4.汇编程序的伪指令section .data用于定义数据段,section .text用于定义代码段。
5.使用汇编指令mov将要相加的两个数赋值给寄存器,使用汇编指令add将两个数相加,并将结果保存到一个寄存器中。
6.使用汇编指令mov将结果从寄存器中取出,并输出到屏幕。
7.编译和运行汇编程序,查看结果是否正确。
五、实验结果分析经过编译和运行,实验程序顺利执行,结果正确输出。
通过这个实验,加深了对汇编语言的理解和掌握。
六、实验总结通过本次实验,我了解了汇编语言的基本概念和基本语法,并掌握了常见汇编指令的使用方法。
在实验过程中,我遇到了一些问题,如如何正确使用汇编指令以及如何调试程序等,但在同学和老师的帮助下,我顺利完成了实验,并且收获了很多。
通过这次实验,我深刻认识到汇编语言是一种非常底层的语言,需要对计算机底层原理有一定的了解,才能编写出正确的汇编程序。
同时,我也意识到汇编语言虽然复杂,但它的执行效率非常高,可以在一些特定场景下发挥出很大的作用。
总而言之,本次实验让我对汇编语言有了更深入的了解,也提高了我的编程能力。
希望在以后的学习中能够深入学习汇编语言,并能够熟练地使用它。
汇编实验报告
汇编实验报告姓名:管仕敏班级:软件124学号:129074257 指导老师:陆勤实验一汇编运行环境及方法、简单程序设计1.程序说明:本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。
再代码段比较字符串string1和string2,通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
2.程序代码(比较两字符串):datarea segmentstring1 db 'Move the cursor backward.'string2 db 'Move the ecursor backward.'mess1 db 'Match.',13,10,'$'mess2 db 'No match!',13,10,'$'datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datareastart:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short disp match:lea dx,mess1 disp:mov ah,09int 21hretmain endpprognam endsend start 3.截图:该程序是用来判断两字符串string1和string2是否相同,相同则显示match。
汇编实验报告2
篇一:汇编实验报告2汇编语言与接口课程实验报告实验名称循环与分支程序设计实验室名称班级________________软件93_______________ 学号_______________09161059_______________ 实验日期年月日评分教师实验报告成绩__________ 评分日期________年_______月________日一、二、实验目的实验环境实验内容熟悉汇编语言上机环境masm以及上机过程,学会设计循环与分支程序;掌握基本的输入输出及debug调试。
编程环境:masm for windows 集成实验环境 2011 三、预习:了解循环程序的结构形式,掌握do_while结构和do_until结构学会设置循环的初始状态、循环体和循环控制部分,掌握loop等指令了解分支程序的结构形式,掌握一般的控制转移指令及跳跃表法实验题目:1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来2. 试编制一个汇编语言程序,求出首地址为data的100d字数组中的最小偶数,并把它存放在ax中3. 试编写一汇编语言程序,要求从键盘接收一个4位的十六进制数,并在终端上显示与它等值的二进制数实验步骤:实验一主要步骤:从键盘接收一个字符,判断是否为’0’,若是则退出;否则判断该字符是否介于’a’和’z’之间,若是输出空格,并给该字符减去20h后输出,再输出回车换行进行下一次操作,否则直接回车换行进行下次操作。
实验二主要步骤:循环初始设置,将最大的奇数ffff赋给ax(无符号),bx设为0(采用寄存器相对寻址法),cx设为100,循环100次;从数组读取一个字到dx中,test若最后一位为1则进行下次循环,否则与ax进行比较,如果小则交换,否则进行下次循环实验三主要步骤:循环四次从键盘接收四个字符并将其存放到一个数组中,每次判断如果字符为’q’,则退出,介于’0’到’9‘之间,减去30h,介于’a’到‘f’之间减去37h;然后对每个字节分别向右移动3、2、1、0位,与0x01相与后输出四、源程序清单、测试数据、运行结果实验一(1) 源程序清单start:mov ax,datasmov ds,ax;此处输入代码段代码 next:mov ah,01h int 21h cmp al,0 jz exit cmp al,a jl next1 cmp al,z jg next1 mov bl,al mov dl,20h mov ah,02h int 21hsub bl,20h mov dl,bl mov ah,02h int 21h next1:mov dl,0ah mov ah,02h int 21hmov dl,0dh mov ah,02h int 21h jmp next exit:mov ah,4chint 21h(2) 运行结果:实验二(1) 源程序清单: start:mov ax,datas mov ds,ax;此处输入代码段代码 mov ax,0ffffh mov cx,100 movbx,0loop1:mov dx,data[bx] test dx,0001h jnz next cmp dx,ax jge next mov ax,dx next:add bx,2 loop loop1 mov ah,4chint 21h(2) debug调试:实验三(1)源程序清单 start:movax,datas篇二:汇编第2次上机实验报告汇编语言上机实验报告时间: 2013-4-19,19:00-21:30 地点:南一楼803室实验人员:王涛实验一一、题目从键盘输入两串字符分别存入buf1和buf2区,比较两串内容是否相等,相等显示“match !”, 不相等显示“no match !”。
汇编器实验报告
汇编器实验报告篇一:汇编实验报告实验一(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所示。
汇编实验报告,(例文)
汇编实验报告,(例文)《汇编语言程序设计》实验报告2021年11月★★FGL实验一:汇编语言运行环境及方法、简单程序设计I:实验要求:1、绘制程序流程图2、结合你的调试过程,整理其中用到的debug命令的使用方法和效果截图,并解释每一步骤的结论3、调试中遇到的问题及解决方法 II:具体实验过程:a.程序流程图1、开始输入源程序根据实验步骤进行汇编比较string1与string2输出NO输出Match结束b.调试过程及debug命令使用方法·-u命令反汇编:·-g0b·-d0:查看数据段内容·-g:执行完程序显示结果根据数据段显示的数据内容可知,在;两字符串分别为"Movethecursorbackward."和"Movethecursordackward.",因而可根据debug命令中的-e将第二个字符串中的d修改为b则可使结果显示为MATCH!具体步骤如下:如下图所示,对内存中1436:0029的存储单元进行-e29命令修改的前后数据的显示,可看到已经将d修改为b,从而-g命令运行的结果是Match.(注:-a 和-f命令亦可修改数据区内容但使用时有一定的区别)·-q命令退出debug调试:·-t命令的单步调试:(该过程中IP不断变化着)实验二:用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等I:实验要求:1、任务1的指令序列2、整理本次试验中用到的debug命令的使用方法及效果截图II:实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。
3、掌握简单指令的执行过程。
III:实验内容:任务一、设堆栈指针SP=2021H,AX=3000H,BX=5000H;请编一程序段将AX 和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XXXX大学实验报告课程名称汇编语言程序设计成绩实验学时评语:指导教师:年月日班级:学号:姓名:地点:时间:实验一汇编语言编程实验一、实验目的(1)掌握汇编语言的编程方法(2)掌握DOS功能调用的使用方法(3)掌握汇编语言程序的调试运行过程二、实验内容1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。
2. 在屏幕上显示自己的学号姓名信息。
3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。
4. 实验中使用的DOS功能调用: INT 21HAH 值功能调用参数结果1 键盘输入并回显AL=输出字符2 显示单个字符(带Ctrl+Break检查) DL=输出字符光标在字符后面6 显示单个字符(无Ctrl+Break检查) DL=输出字符光标在字符后面8 从键盘上读一个字符AL=字符的ASCII码光标跟在串后面9 显示字符串DS:DX=串地址,‘$’为结束字符4CH 返回DOS系统AL=返回码例如,实现键盘输入并回显的完整代码:MOV AH 01HINT 21H三、实验结果1. 将指定数据区的字符串数据”Let us go !”以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示:2. 在屏幕上显示自己的学号姓名信息3.循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。
四、实验原理DATA SEGMENTMES DB 'NUMBER: 03099018 ',0AH,0DH,'NAME: Feng Xiaokang',0AH,0DH,'$'CENT DB 'Let us go !','$'ENTE DB 0AH,0DH,'$'INFO DB 'Origin: ','$'ASCI DB 'ASCII : ','$'MSG1 DB 'If you want to quit please press...q/Q...',0AH,0DH,'$' MSG2 DB 0AH,0DH,'Char: $'RS DB ' ASCII: $'SD DB ''DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA ;存储数据MOV DS,AXMOV DX,OFFSET MES ;显示数据MOV AH,09HINT 21HMOV DX,OFFSET MSG1MOV AH,09HINT 21HMOV DX, OFFSET CENTMOV SI, DXT: MOV AL,[SI]CMP AL,'$'JZ C1AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB AADD AL,07HA: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21H;MOV AL,DS:[SI]MOV AL, [SI]AND AL,0FH ;取低4位CMP AL,0AHJB BADD AL,07HB: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HINC SILOOP TC1: MOV DX,OFFSET MSG2MOV AH,09HINT 21HMOV AH,01hINT 21hCMP AL,'q'JE exitCMP AL,'Q'JE exitMOV SD,ALMOV DX,OFFSET RS ;show messageMOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HLOOP C1C: MOV DX,OFFSET MSG1MOV AH,09HINT 21HLOP: MOV AH,08HINT 21HCMP AL,'Q'JE exitCMP AL,'q'JE exitJMP LOPEXIT: MOV AX,4C00H ;go back to dosINT 21HCODE ENDSend START五、实验流程图六、实验总结这是我学习汇编以来,第一次用汇编写程序,费了我不只一个实验课时,纠结了不只一天。
同样是助记码,真的不懂如何组织的。
郁闷之下,用C写出来发泄一下,才猜想应该跟C的思考方式完全不同。
后来开始研究代码,真的不愧是底层啊,详细到一个字节高低位的安排,如此地考验硬件知识。
实验二数码转换实验一、实验目的1. 掌握不同进制数及编码相互转换的程序设计方法。
2. 掌握运算类指令编程及调试方法。
3. 掌握循环程序的设计方法。
二、实验设备PC机一台。
三、实验内容及说明1. 重复从键盘输入不超过5位的十进制数,按回车键结束输入;2.将该十进制数转换成十六进制数;结果以16进制数的形式显示在屏幕上;3.如果输入非数字字符,则报告出错信息,重新输入;4.直到输入“Q”或‘q’时程序运行结束。
四、实验结果1.输入33062.结果0CEA3.输入一个较大的数655374.显示456A65.输入非法值五、实验原理图源代码:DATA SEGMENTNUMBER DB 'No.: 03099018 ',0AH,0DH,'NAME: Fengxiaokang',0AH,0DH,'$' ERROR DB 0AH,0DH,'ERROR! PLEASE TRY AGAIN!',0AH,0DH,'$'INP DB 0AH,0DH,'Please input a number,you can exit by inputing "q" or "Q"',0AH,0DH,'$' XP DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAstart: MOV AX,DATAMOV DS,AXMOV DX,OFFSET NUMBERMOV AH,09HINT 21HMOV BX,0HMOV DX,OFFSET INPMOV AH,09HINT 21Hinput:MOV AH,01HINT 21HCMP AL,0DH ;数字输入完毕JE changeCMP AL,'Q' ;退出JE EXITCMP AL,'q'JE EXITCMP AL,030h ;非数字jl errorscmp AL,039hjg errorsSUB AL,30H ;运算push AXmov AX,BXmov DX,0000AHmul DXmov BX,AXpop AXadd BL,ALCMP BX,00HJZ ZEROjmp inputerrors: MOV DX,OFFSET ERRORMOV AH,09HINT 21HMOV BX,0Hjmp inputZERO: MOV CL,4JMP LOOPSchange:CMP BX,00HJZ ERRORSMOV CL,4loops:MOV DX,BXAND DX,0F000HSHR DX,12CMP DX,0AH ;是否是A以上的数JL C2ADD DX,07HC2: ADD DX,30H;show chArActerMOV AH,02HINT 21HSHL BX,4LOOP loopsMOV DX,OFFSET XPMOV AH,09HINT 21HJMP INPUTEXIT:MOV AX,4C00HINT 21HCODE ENDSEND START原理十进制数可以表示为:D n*10n+D n-1*10n-1+…+D0*100=∑ D i*10i其中D i代表十进制数1、2、3、…、9、0。
上式可以转换为:∑ D i*10i=(((D n*10n+D n-1)*10+ D n-2)*10+…+ D1)*10+ D0由上式可归纳出十进制数转换为二进制数的方法:从二进制数的最高位D n开始做乘10加次位的操作。
依此类推,则可求出二进制数结果。
数码转换对应关系十六进制BCD码二进制机器码ASCII码七段码共阳共阴0 0000 0000 30H 40H 3FH1 0001 0001 31H 79H 06H2 0010 0010 32H 24H 5BH3 0011 0011 33H 30H 4FH4 0100 0100 34H 19H 66H5 0101 0101 35H 12H 6DH6 0110 0110 36H 02H 7DH7 0111 0111 37H 78H 07H8 1000 1000 38H 00H 7FH9 1001 1001 39H 18H 67HA 101 41H 08H 77HB 1011 42H 03H 7CHC 1100 43H 46H 39HD 1101 44H 21H 5EHE 1110 45H 06H 79HF 1111 46H 0EH 71H七、实验总结(体会)当汇编与算法结合在一起的时候,意味着难度又上升了一个层次。
这是一个常见的进制转换程序,除了要处理数制问题,题目中不超过5位的要求也要注意,因为会存在溢出问题。
三、源代码:MY_STACK SEGMENT PARA 'STACK'DB 100 DUP(?)MY_STACK ENDSMY_DATA SEGMENT PARA 'DATA'IO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间IO_base_address DB 4 DUP(0) ;PCI卡I/O基地址暂存空间pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$'GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'P8254_T0 DW 0000HP8254_T1 DW 0001HP8254_T2 DW 0002HP8254_MODE DW 0003HP8255_A DW 0020HP8255_B DW 0021HP8255_C DW 0022HP8255_MODE DW 0023HMY_DATA ENDsMY_CODE SEGMENT PARA 'CODE'MY_PROC PROC FARASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACKMAIN:.386 ;386模式编译MOV AX,MY_DATAMOV DS,AXMOV ES,AXMOV AX,MY_STACKMOV SS,AXCALL FINDPCI ;自动查找PCI卡资源及IO口基址MOV CX,word ptr IO_base_address; MOV CX,0E800H ;直接加入(E800:本机PCI卡IO口基址)ADD P8254_T0,CX ;PCI卡IO基址+偏移ADD P8254_T1,CXADD P8254_T2,CXADD P8254_MODE,CXADD P8255_A,CX ;PCI卡IO基址+偏移ADD P8255_B,CXADD P8255_C,CXADD P8255_MODE,CXMOV DX,P8254_MODE ;写入方式控制字MOV AL,37H ;计数器0,先读写低位,后读写高位,OUT DX,AL ;方式3,BCD码计数MOV AH, 4CHINT 21HA1: MOV DX,P8254_T0MOV AL,32H ;初值低8位OUT DX,ALMOV AL,00H ;初值高8位OUT DX,ALMY_PROC ENDp;*****************************************************************************; /*按任意键退出*/;*****************************************************************************;*****************************************************************************; /* 找卡子程序 */;*****************************************************************************;FUNCTION CODEIO_port_addre EQU 0CF8H ;32位配置地址端口IO_port_data EQU 0CFCH ;32位配置数据端口IO_PLX_ID EQU 200810B5H ;PCI卡设备及厂商IDBADR0 = 10H ;基地址寄存器0BADR1 = 14H ;基地址寄存器1BADR2 = 18H ;基地址寄存器2BADR3 = 1CH ;基地址寄存器3FINDPCI PROC NEAR ;查找PCI卡资源并显示PUSHADPUSHFDMOV EBX,080000000HFINDPCI_next:ADD EBX,100HCMP EBX,081000000HJNZ findpci_continueMOV DX,offset pcicardnotfind ;显示未找到PCI卡提示信息MOV AH,09HINT 21HMOV AH,4CHINT 21H ;退出findpci_continue:MOV DX,IO_port_addreMOV EAX,EBXOUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口CMP EAX,IO_PLX_IDJNZ findpci_next ;检查是否发现PCI卡MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR1OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_9054base_address,EAXAND EAX,1JZ findPCI_next ;检查是否为i/o基址信息MOV EAX,dword ptr IO_9054base_addressAND EAX,0fffffffehMOV dword ptr IO_9054base_address,EAX ;去除i/o指示位并保存MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR2OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_base_address,EAXAND EAX,1JZ findPCI_next ;检查是否为i/o基址信息MOV EAX,dword ptr IO_base_addressAND EAX,0fffffffehMOV dword ptr IO_base_address,EAX ;去除i/o指示位并保存MOV DX,offset good ;显示开始执行程序信息MOV AH,09HINT 21HPOPfdPOPadRETfindPCI ENDPMY_CODE ENDSEND MAIN实验四可编程并行接口8255实验一、实验内容(1)流水灯实验:利用8255的A口、B口循环点亮发光二极管。