汇编语言实验报告

合集下载

汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令‎练习的实验报告总结‎汇编语言指令及伪指令‎练习的实验报告总结‎‎篇一:汇‎编语言实验报告福建‎农林大学金山学院课‎程名称:姓‎名:系:‎专业:‎年级:学‎号:指导教师‎:职称:‎ (程序设计类‎课程) 实验报告汇‎编语言 201X~2‎01X学年第二学期‎实验项目列表福建农‎林大学金山学院实验报‎告系:专‎业:年级:‎姓名:‎学号:‎实验课程:‎汇编语言实验室号:‎_ _1#6‎05 实验设备号:‎ I3 实验时‎间:201‎X.4.25‎指导教师签字:‎成绩:‎实验一汇编程序的‎汇编及运行1‎.实验目的和要求‎ (1)熟悉汇编程‎序的汇编、连接、执行‎过程;(2)‎生成LST文件,查看‎L ST文件;‎(3)生成BJ文件,‎修改语法错误;‎(4)生成EXE文‎件;(5)执‎行程序。

2.‎实验环境 IBM—P‎C机及其兼容机;实‎验的软件环境是:‎操作系统:‎ DS2.‎0以上;调试程序:‎ DEBUG.C‎M;文本编程程序:‎ EDIT.EX‎E、PS.EXE;宏‎汇编程序:M‎A SM.EXE(或A‎S M .EXE);连‎接装配程序:‎L INK .EXE;‎交叉引用程序:‎CREF.EXE(‎可有可无)。

‎3.实验内容及实验数‎据记录(1)‎将数据段输入,取名‎ 1.txt,保存‎在MASM文件夹下。

‎生成LST文件,(不‎必连接、运行)用ED‎I T查看1.L‎S T文件。

试回答:‎ DA1,DA2‎的偏移量分别是多少?‎C UNT的值为多少?‎DATA SEGM‎E NT RG 20H‎NUM1=8 NU‎M2=NUM1+10‎H DA1 DB ‘‎I BM PC’ CU‎N T EQU $-D‎A1 DATA EN‎D S DA2 DB ‎0AH, 0DH E‎N D(2)输‎入有错误的文件,修改‎错误语句。

(MASM‎没有出现错误即可。

不‎必连接、运行。

)‎D ATA SEGME‎N T VAR1 DB‎0, 25, DH‎,300 VAR2‎DB 12H, A‎4H, 6BH VA‎R3 DB ’ABC‎D EF’ VAR4 ‎D 1H, 5678‎H VAR5 D 1‎0H DUP(?) ‎D ATA ENDS ‎C DE SEGMEN‎T ASSUME C‎S: CDE, DE‎: DATA MV ‎D S, AX LEA‎SI, VAR5 ‎M V BX, FFS‎E T VAR2 MV‎[SI], 0AB‎H MV AX, V‎A R1+2 MV [‎B X], [SI] ‎M V VAR5+4,‎VAR4 MV A‎H, 4CH INT‎21H ENDS ‎E ND START ‎B EING MV A‎X, DATA CD‎E(3)输入‎正确的程序,汇编、连‎接、运行 STACK‎S SEGMENT ‎S TACK D 12‎8DUP(?) E‎N DS SEGMEN‎T ENDS SEG‎M ENT ASSUM‎E CS: CDES‎,DS: DATA‎S STACKS D‎A TAS DATAS‎CDES STRI‎N G DB ‘ELC‎M E!’, 13, ‎10, ‘$’ ST‎A RT: M‎V AX, DATA‎S MV DS, A‎X LEA DX, ‎S TRING MV ‎A H, 9 INT ‎21H MV AH,‎4CH INT 2‎1H CDES EN‎D S END STA‎R T4.算法‎描述及实验步骤 1)‎首先,用记事本输入‎各段程序,并储存成源‎程序,保存在MASM‎目录下。

汇编语言实验报告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. 字符串拼接程序首先,需要从键盘输入两个字符串。

汇编语言实验七实验报告

汇编语言实验七实验报告

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

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

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

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

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

汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。

二进制数。

要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。

本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。

下编写完整的汇编语言程并生成可执行文件运行。

二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。

构程序。

简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。

2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。

data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。

系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。

十六进制数通过ASCII码对照转换为二进制数。

A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。

汇编语言试验报告

汇编语言试验报告

实验二报告一、实验目的掌握汇编语言分支结构程序设计方法以及int 21h 常用中断方法。

二、实验内容编写程序,实现 3 个数比较大小,并从高到低输出结果。

调试该程序,并输出显示结果本实验是考查学生对分支程序设计的掌握程度,掌握条件转移指令的应用。

三、实验分析运用循环语句将三个数分别输入缓冲区,使用比较字符,运用跳转语句,实现选择升序还是降序排序,再对三个进行比较然后排序。

排序完成后再分别赋给缓冲区中的数组,最后输出!四、实验代码DATA SEGMENTbuf db 3 dup (?)buf1 db?str db 0ah,0dh,'input 3 numbers :$'str0 db 0ah,0dh,'If print in asc order,input 0;else input 1 :$'str1 db 0ah,0dh,'The sort in an descending order:$'str2 db 0ah,0dh,'The sort in a ascending order:$'str3 db 0ah,0dh,'---------------------------------------------$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:mov ax,datamov ds,axmov cx,3lea dx,str ;显示提示信息mov ah,09hint 21hlea bx,bufloop1:mov ah,01hint 21hmov [bx],alinc bxloop loop1lea dx,str0 ;显示提示信息mov ah,09hint 21hmov dx,offset buf1 ;为输出的字符选择存储空间mov ah,01hint 21hcmp al,30h ;输入的字符与0比较jz ascend ;若输出的字符等于0,则跳转到ascend,执行升序descend: ;降序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljae n1 ;大于等于则跳转xchg al,bln1:cmp al,cljae n2xchg al,cln2:cmp bl,cljae n3xchg bl,cln3:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str1mov ah,09hint 21hcall pascend: ;升序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljnae n4 ;小于等于则跳转xchg al,bln4:cmp al,cljnae n5xchg al,cln5:cmp bl,cljnae n6xchg bl,cln6:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str2mov ah,09hint 21hcall pp procmov si,offset bufmov cx,3fe:mov dl,[si]mov ah,02hint 21hmov dl,20h ;显示空格mov ah,02hint 21hinc siloop femov ah,4chint 21hretp endpCODE ENDSEND START五、总结通过本次实验,我发现自己对跳转语句的不熟悉,导致实验过程中遇到好多错误,还有没能实现进行多个数的比较,有待改进。

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

调试结果:。

汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。

通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。

三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。

2、实现数据在不同寄存器和内存单元之间的传送。

(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。

2、进行移位操作,包括左移和右移,理解移位对数据的影响。

(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。

2、根据给定的条件,使用分支结构实现不同的操作。

(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。

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

四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。

2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。

3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。

4、最后,使用`MOV` 指令将结果存储到指定的内存单元。

(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。

2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。

3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。

(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。

2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。

(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。

汇编语言实验报告

汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际操作和编程实践,深入理解汇编语言的基本概念、指令系统和编程方法,提高对计算机底层硬件操作的认识和编程能力。

二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与算术运算实现两个 16 位整数的加法和减法运算,并将结果存储在指定的内存单元中。

使用不同的数据传送指令,如 MOV、PUSH、POP 等,将数据在寄存器和内存之间进行传输。

2、逻辑运算与移位操作对给定的 8 位二进制数据进行逻辑与、或、异或运算,并观察结果。

执行移位操作,包括逻辑移位(SHL、SHR)和算术移位(SAL、SAR),理解移位对数据的影响。

3、分支与循环结构使用条件跳转指令(如 JZ、JE、JC 等)实现根据不同条件执行不同代码段的功能。

编写循环结构程序,如使用 LOOP 指令实现对数组元素的求和操作。

4、子程序调用定义一个子程序,实现特定的功能,如计算一个数的阶乘。

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

四、实验步骤1、数据传送与算术运算实验首先,在代码编辑器中编写汇编代码,定义数据段和代码段。

在数据段中初始化两个 16 位整数,例如 MOV WORD PTR DATA1, 1000H 和 MOV WORD PTR DATA2, 2000H 。

在代码段中使用 ADD 和 SUB 指令进行加法和减法运算,如 ADD WORD PTR RESULT_ADD, DATA1 和 SUB WORD PTRRESULT_SUB, DATA2 。

编译和链接代码,生成可执行文件。

运行程序,查看内存中存储的运算结果。

2、逻辑运算与移位操作实验类似地,定义数据段和代码段。

在数据段中初始化 8 位二进制数据,如 MOV AL, 01010101B 。

在代码段中使用AND、OR、XOR 指令进行逻辑运算,以及SHL、SHR、SAL、SAR 指令进行移位操作。

汇编语言实验报告二

汇编语言实验报告)(实验二实验二)一.实验目的1.掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。

2.熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。

3.初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。

二.程序说明1.计算1+2+3+…+10,将结果显示在屏幕上。

2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。

编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。

三.设计思想1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余al是商,ah是余数,后加上30h。

2、使用si寄存器,用于在存储器中寻址。

利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。

利用01号功能,输出。

四.程序代码程序一code segment main proc far assume cs:code start: push ds sub ax,ax push ax mov bx,0ah mov cx, 0ah sum1: add ax,bx dec bx loop sum1 printit: mov bl,10 div bl add al,30h mov ch,ah mov dl,al mov ah,2 int 21h add ch,30h mov dl,ch mov ah,2 int 21h ret main endp code ends end 程序二程序二data segment ;数据段定义开始数据段定义开始buf db 10 dup(?) ;数据定义及其存储空间数据定义及其存储空间 max db ? min db ? Str1 db 0DH,0AH,'Please input: ','$' ;定义Str1的内容的内容 Str2 db 0DH,0AH,'MAX:','$' ;定义Str2的内容的内容 Str3 db 0DH,0AH,'MIN:','$' ;定义Str3的内容的内容 data ends ;数据段定义结束数据段定义结束Stack segment stack ;堆栈段定义开始堆栈段定义开始db 10 dup(?) stack ends ;堆栈段定义结束堆栈段定义结束code segment ;代码段定义开始代码段定义开始main proc far assume cs:code,ds:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov cx,10 mov si,0 ;寄存器,用于寻址寄存器,用于寻址mov bx,0 lop1: lea dx,Str1 mov ah,09 int 21h mov ah,01h ; 输入输入int 21h mov buf[si],al inc si loop lop1 ;返回循环1 mov cx,9 mov si,0 mov al,buf[si] mov bl,al lop2: inc si mov dl,buf[si] cmp dl,al jl compare1 mov al,dl compare1: cmp bl,dl ;比较,小的数放在bl jl compare2 mov bl,dl compare2: loop lop2 mov max,al mov min,bl lea dx,Str2 mov ah,09 int 21h mov dl,max mov ah,02h int 21h ;输出最大数输出最大数lea dx,Str3 mov ah,09 int 21h mov dl,min mov ah,02h int 21h ;输出最小数输出最小数ret main endp code ends end start 五. 结果分析并回答: 1. 设计的程序包含了几个段设计的程序包含了几个段 2. 你的代码经过编译和连接之后,总共占用多少个字节你的代码经过编译和连接之后,总共占用多少个字节3. 调用DEBUG 进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?指令的地址码是多少?4. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能个数字的累加功能5.对于第2题,若要求输入的是两位数,又该怎么办?题,若要求输入的是两位数,又该怎么办? 程序一:运行结果运行结果1、本程序包含了一个段,即为代码段、本程序包含了一个段,即为代码段2、代码经过编译和连接之后,共占32个字节个字节3、第一条指令的地址码、第一条指令的地址码最后一条指令的地址码最后一条指令的地址码程序二运行结果运行结果1、本程序包含了数据段、堆栈段和代码段三个段。

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

汇编语言实验报告
网工141 郑逸
一、不同的寻址方式调用数据
1.立即数寻址
代码段:mov ax,1000
2.直接寻址
代码段:mov ax,1200
mov [1000],ax
mov bx,[1000]
注意事项:默认段位数据段(即[1000] == ds:[1000])
3.间接寻址
代码段:mov ax,1200
mov [1000],ax
mov ax,0000
mov bx,1000
mov ax,[bx]
注意事项:1.[R]--R只能是4个16位通用寄存器(BX,DI,SI,BP)当中的一个其余的寄存器不能使用寄存器的间接寻址法
2.其中默认段仍然是数据段,但允许进行段超越(例如:SS:[BX],即
将SS段当中的数据进行转移)
4.变址寻址
代码段:mov ax,1200
mov [1002],ax
mov ax,0000
mov bx,500
mov ax,2[500*2](dosbox环境下貌似不支持直接打出*符号,因此在试
验当中我直接使用1000进行代替)
使用格式: [R*F+V]
其中R是寄存器,F是比例因子(可为1、2、4、8),V是位移量(当
R是16位寄存器时,V也不应该超过16,另外v 是一个符号数)5.基址加变址寻址
基址寄存器:BX、BP
变址寄存器:SI、DI
使用格式:V[BR][IR*F]
代码段:mov ax,1200
mov [1002],ax
mov ax,0000
mov bx,900
mov si,700(注意这里的运算方式是16进制)
mov ax,2[bx][si]
注意事项:1.当BR=BX时,默认段寄存器为数据段寄存器DS
当BR=BP时,默认段寄存器为堆栈段寄存器SS
2.基址加变址寻址方式主要运用于对二维表格的操作
二、使用masm 和link对文件进行编译
三、一些常用的机器指令语句
1.实验目的:测试循环程序
测试目前常用的指令
2.实验内容:用循环实现累加的语句,并且将数字保存在内存当中
3.实验代码:
4.实验步骤:
a)设置数据段,‘$’字符在汇编当中可以截断数据段自此往后的内容不进行显示;
b)行10 :MOV AH,09H 调用系统自带的功能,09H的功能为显示,显示内容为以ds为段地址,dx为偏移地址的内存当中的内容;
c)行15 :AGAIN是循环段 JNZ是通过判断flag寄存器当中的ZF位(全零判断位)来判断是否执行循环,AGAIN是一个标记字符,用来标记循环开始代码段的偏移地址;
d)循环体当中所涉及到的一些指令:
1.ADD指令,加法指令:ADD AX,BX 将AX和BX中的内容相加送进AX
进行保存;
2.INC指令,累加指令:INC AX 使AX当中的内容+1;
3.DEC指令,减1指令:DEC CX 使CS当中的内容-1;
e)行20 : OFFSET指令:和LEA指令具有相同含义,取后面内容的偏移地址;
f)行25 : XLAG指令:XLAG AX,BX 交换两个寄存器当中的内容,同时需要保证两个寄存器的字长相同;
g)行41 : MOV AH,4CH 调用系统功能,结束当前的代码段;
5.实验结果
显示一行字符串,并且显示累加(3+2+1)的结果。

相关文档
最新文档