宏指令应用程序设计实验程序设计实验报告 1211.docx

上传人:b****5 文档编号:6351230 上传时间:2023-01-05 格式:DOCX 页数:25 大小:478.66KB
下载 相关 举报
宏指令应用程序设计实验程序设计实验报告 1211.docx_第1页
第1页 / 共25页
宏指令应用程序设计实验程序设计实验报告 1211.docx_第2页
第2页 / 共25页
宏指令应用程序设计实验程序设计实验报告 1211.docx_第3页
第3页 / 共25页
宏指令应用程序设计实验程序设计实验报告 1211.docx_第4页
第4页 / 共25页
宏指令应用程序设计实验程序设计实验报告 1211.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

宏指令应用程序设计实验程序设计实验报告 1211.docx

《宏指令应用程序设计实验程序设计实验报告 1211.docx》由会员分享,可在线阅读,更多相关《宏指令应用程序设计实验程序设计实验报告 1211.docx(25页珍藏版)》请在冰豆网上搜索。

宏指令应用程序设计实验程序设计实验报告 1211.docx

宏指令应用程序设计实验程序设计实验报告1211

实验六宏指令运用程序设计实验

学号:

41210038

姓名:

罗天继

一、实验目的:

1、复习掌握:

宏定义,宏调用,宏展开概念;

2、练习掌握:

宏指令在汇编程序中的应用方法;

3、学习掌握:

宏库的概念,学会制作宏库文件的技术;

4、学习掌握:

在汇编程序中引用宏库的编程技术;

5、学习掌握:

宏操作符的概念,在汇编程序中的应用技术;

6、讨论掌握:

宏在汇编程序设计中的地位与作用。

二、实验内容:

实验1:

1、编写一个将AX中数据乘以10的宏MULTAX10,并编制一个程序SY6_1.ASM调用MULTAX10,且调试运行,验证其功能的实现情况;

源文件SY6_1.asm文件内容:

.286;保留

MULTAX10MACRO

PUSHBX

SALAX,1

MOVBX,AX

SALAX,1

SALAX,1

ADDAX,BX

POPBX

ENDM

DATASEGMENT;保留

;填入内容

DATAENDS;保留

STACK1SEGMENTPARASTACK;保留

DW20HDUP(0);保留

STACK1ENDS;保留

CODESEGMENT;保留

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1;保留

START:

MOVAX,DATA;保留

MOVDS,AX;保留

MOVAX,01H

MULTAX10

;填入内容

MOVAX,4C00H;保留

INT21H;保留

CODEENDS;保留

ENDSTART;保留

编译源文件“SY6_1.asm”生成可执行文件“DebugSY6_1.exe”

SY6_1.ini文件内容:

u0,1E

d2867:

0,1f

g=0,14

d2867:

0,1f

q

SY6_1.bat文件内容:

Debugsy6_1.exe>sy6_1.txt

执行SY6_1.bat文件后可以获得SY6_1.txt文件;

SY6_1.txt文件内容:

-u0,1E

2867:

0000B86328MOVAX,2863

2867:

00038ED8MOVDS,AX

2867:

0005B80100MOVAX,0001

2867:

000853PUSHBX

2867:

0009D1E0SHLAX,1

2867:

000B8BD8MOVBX,AX

2867:

000DD1E0SHLAX,1

2867:

000FD1E0SHLAX,1

2867:

001103C3ADDAX,BX

2867:

00135BPOPBX

2867:

0014CD21INT21

2867:

001622CBANDCL,BL

2867:

001840INCAX

2867:

0019AFSCASW

2867:

001A21CBANDBX,CX

2867:

001C40INCAX

2867:

001DAFSCASW

2867:

001E21CBANDBX,CX

-d2867:

0,1f

2867:

0000B863288ED8B80100-53D1E08BD8D1E0D1.c(.....S.......

2867:

0010E003C35BCD2122CB-40AF21CB40AF21CB...[.!

".@.!

.@.!

.

-g=0,14

AX=000ABX=0000CX=0056DX=0000SP=0040BP=0000SI=0000DI=0000

DS=2863ES=2853SS=2863CS=2867IP=0014NVUPEIPLNZNAPENC

2867:

0014CD21INT21

-d2867:

0,1f

2867:

0000B863288ED8B80100-53D1E08BD8D1E0D1.c(.....S.......

2867:

0010E003C35BCD2122CB-40AF21CB40AF21CB...[.!

".@.!

.@.!

.

-q

显然,上面忠实地记录了内存的情况并且展示了实验结果。

这是我做的第一个汇编程序,领悟很深刻,把编写汇编程序的流程拉了一遍,熟悉了一些汇编命令,对以后编写更大的汇编程序奠定了基础。

实验2:

2、编写一个将两个存储单元(字或字节)的内容相互交换的宏EXCHANGE,并编制一个程序SY6_2.ASM调用EXCHANGE,且调试运行,验证其功能的实现情况;

源文件SY6_2.asm文件内容:

.286;保留

EXCHANGEMACROMEM1,MEM2,REG

MOVREG,MEM1

XCHGREG,MEM2

MOVMEM1,REG

ENDM

DATASEGMENT;保留

;填入内容

DA_W1DW1234H

DA_W2DW5678H

DATAENDS;保留

STACK1SEGMENTPARASTACK;保留

DW20HDUP(0);保留

STACK1ENDS;保留

CODESEGMENT;保留

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1;保留

START:

MOVAX,DATA;保留

MOVDS,AX;保留

EXCHANGEDA_W1,DA_W2,CX

;填入内容

MOVAX,4C00H;保留

INT21H;保留

CODEENDS;保留

ENDSTART;保留

编译源文件“SY6_2.asm”生成可执行文件“DebugSY6_2.exe”

SY6_1.ini文件内容:

u0,1E

d2868:

0,1f

g=0,1F

d2868:

0,1f

q

SY6_2.bat文件内容:

debugSY6_2.exe>SY6_2.txt

执行SY6_2.bat文件后可以获得SY6_2.txt文件;

SY6_2.txt文件内容:

-u0,1E

2868:

0000B86328MOVAX,2863

2868:

00038ED8MOVDS,AX

2868:

00058B0E0000MOVCX,[0000]

2868:

0009870E0200XCHGCX,[0002]

2868:

000D890E0000MOV[0000],CX

2868:

00110000ADD[BX+SI],AL

2868:

00130000ADD[BX+SI],AL

2868:

00150000ADD[BX+SI],AL

2868:

00170000ADD[BX+SI],AL

2868:

00190000ADD[BX+SI],AL

2868:

001B0000ADD[BX+SI],AL

2868:

001D0000ADD[BX+SI],AL

-d2868:

0,1f

2868:

0000B863288ED88B0E00-00870E0200890E00.c(.............

2868:

00100000000000000000-0000000000000000................

-g=0,1F

AX=2863BX=0000CX=5678DX=0000SP=0040BP=0000SI=0000DI=0000

DS=2863ES=2853SS=2864CS=2868IP=001FNVUPEIPLNZNAPECY

2868:

001F0000ADD[BX+SI],ALDS:

0000=2D

-d2868:

0,1f

2868:

0000B863288ED88B0E00-00870E0200890E00.c(.............

2868:

00100000000000000000-0000000000000000................

-q

显然,上面忠实地记录了内存的情况并且展示了实验结果。

领悟很深刻,把编写汇编程序的流程拉了一遍,熟悉了一些汇编命令,对以后编写更大的汇编程序奠定了基础。

实验3:

3、编制一个调用宏MULTAX10和EXCHANGE的程序SY6_3.ASM,且调试运行,验证其功能的实现;

源文件SY6_3.asm文件内容:

.286;保留

MULTAX10MACRO

PUSHBX

SALAX,1

MOVBX,AX

SALAX,1

SALAX,1

ADDAX,BX

POPBX

ENDM

EXCHANGEMACROMEM1,MEM2,REG

MOVREG,MEM1

XCHGREG,MEM2

MOVMEM1,REG

ENDM

DATASEGMENT;保留

;填入内容

DA_W1DW1234H

DA_W2DW5678H

DATAENDS;保留

STACK1SEGMENTPARASTACK;保留

DW20HDUP(0);保留

STACK1ENDS;保留

CODESEGMENT;保留

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1;保留

START:

MOVAX,DATA;保留

MOVDS,AX;保留

MOVAX,01H

MULTAX10

EXCHANGEDA_W1,DA_W2,CX

;填入内容

MOVAX,4C00H;保留

INT21H;保留

CODEENDS;保留

ENDSTART;保留

编译源文件“SY6_3.asm”生成可执行文件“DebugSY6_3.exe”

SY6_3.ini文件内容:

u0,1C

d2868:

0,1f

g=0,14

d2868:

0,1f

q

SY6_3.bat文件内容:

debugSY6_3.exe>SY6_3.txt

执行SY6_3.bat文件后可以获得SY6_3.txt文件;

SY6_3.txt文件内容:

-u0,1C

2868:

0000B86328MOVAX,2863

2868:

00038ED8MOVDS,AX

2868:

0005B80100MOVAX,0001

2868:

000853PUSHBX

2868:

0009D1E0SHLAX,1

2868:

000B8BD8MOVBX,AX

2868:

000DD1E0SHLAX,1

2868:

000FD1E0SHLAX,1

2868:

001103C3ADDAX,BX

2868:

00135BPOPBX

2868:

00148B0E0000MOVCX,[0000]

2868:

0018870E0200XCHGCX,[0002]

2868:

001C890E0000MOV[0000],CX

-d2868:

0,1f

2868:

0000B863288ED8B80100-53D1E08BD8D1E0D1.c(.....S.......

2868:

0010E003C35B8B0E0000-870E0200890E0000...[............

-g=0,14

AX=000ABX=0000CX=0070DX=0000SP=0040BP=0000SI=0000DI=0000

DS=2863ES=2853SS=2864CS=2868IP=0014NVUPEIPLNZNAPENC

2868:

00148B0E0000MOVCX,[0000]DS:

0000=1234

-d2868:

0,1f

2868:

0000B863288ED8B80100-53D1E08BD8D1E0D1.c(.....S.......

2868:

0010E003C35B8B0E0000-870E0200890E0000...[............

-q

显然,上面忠实地记录了内存的情况并且展示了实验结果。

这是我前两个汇编程序综合后的结果,领悟很深刻。

实验4:

4、利用宏操作符“&”编写“能够将某寄存器或存储单元R_M,进行由DIRECT指定的逻辑或算术左/右移位,移位次数由COUNT确定的宏SHIFT_VAR,并编制一个程序SY6_4.ASM调用SHIFT_VAR,且调试运行,验证其功能的实现情况;

源文件SY6_4.asm文件内容:

.286;保留

SHIFTMACROR_M,DIRECT,COUNT

MOVCL,COUNT

S&DIRECTR_M,CL

ENDM

DATASEGMENT;保留

;填入内容

DA_BYTEDB0FH

DATAENDS;保留

STACK1SEGMENTPARASTACK;保留

DW20HDUP(0);保留

STACK1ENDS;保留

CODESEGMENT;保留

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1;保留

START:

MOVAX,DATA;保留

MOVDS,AX;保留

MOVAX,0FH

SHIFTAX,HL,2;AX逻辑左移2位

SHIFTDA_BYTE,AR,3;DA_BYTE单元算术右移3位

;填入内容

MOVAX,4C00H;保留

INT21H;保留

CODEENDS;保留

ENDSTART;保留

编译源文件“SY6_4.asm”生成可执行文件“DebugSY6_4.exe”

SY6_4.ini文件内容:

u0,1E

d2868:

0,1F

g=0,14

d2868:

0,1F

q

SY6_4.bat文件内容:

debugSY6_4.exe>SY6_4.txt

执行SY6_4.bat文件后可以获得SY6_4.txt文件;

SY6_4.txt文件内容:

-u0,1E

2868:

0000B86328MOVAX,2863

2868:

00038ED8MOVDS,AX

2868:

0005B80F00MOVAX,000F

2868:

0008B102MOVCL,02

2868:

000AD3E0SHLAX,CL

2868:

000CB103MOVCL,03

2868:

000ED23E0000SARBYTEPTR[0000],CL

2868:

00120000ADD[BX+SI],AL

2868:

00140000ADD[BX+SI],AL

2868:

00160000ADD[BX+SI],AL

2868:

00180000ADD[BX+SI],AL

2868:

001A0000ADD[BX+SI],AL

2868:

001C0000ADD[BX+SI],AL

2868:

001E0000ADD[BX+SI],AL

-d2868:

0,1F

2868:

0000B863288ED8B80F00-B102D3E0B103D23E.c(............>

2868:

00100000000000000000-0000000000000000................

-g=0,14

AX=003CBX=0000CX=0003DX=0000SP=0040BP=0000SI=0000DI=0000

DS=2863ES=2853SS=2864CS=2868IP=0014NVUPEIPLNZNAPONC

2868:

00140000ADD[BX+SI],ALDS:

0000=3D

-d2868:

0,1F

2868:

0000B863288ED8B80F00-B102D3E0B103D23E.c(............>

2868:

00100000000000000000-0000000000000000................

-q

显然,上面忠实地记录了内存的情况并且展示了实验结果。

写汇编程序一定要仔细,有一个地方不对运行结果就出错,而且不会像我们在高级语言中会给出出错的提示,所以就得更加细心。

实验5

5、利用伪指令“LOCAL”编写“能够将某寄存器或存储单元R1_M1中的数值(作为被乘数),与另一个寄存器或存储单元R2_M2中的数值(作为乘数)相乘,乘积存入内存中存储单元M3中;要求定义的宏“MULTIP”能够在同一个程序中,被连续两次或两次以上的调用。

并编制一个程序SY6_5.ASM两次调用MULTIP,且调试运行,验证其功能的实现情况;

源文件SY6_5.asm文件内容:

.286;保留

MULTIPMACROMULT1,MULT2,MULT3

LOCALLOP,EXIT0

MOVDX,MULT1

MOVCX,MULT2

XORBX,BX

XORAX,AX

JCXZEXIT0

LOP:

ADDBX,DX

ADCAX,0

LOOPLOP

EXIT0:

MOVMULT3,BX

MOVMULT3+2,AX

ENDM

DATASEGMENT;保留

;填入内容

DA1DW1234H,5678H

DA2DW1200H,0ABCDH

DA3DW4DUP(0)

DATAENDS;保留

STACK1SEGMENTPARASTACK;保留

DW20HDUP(0);保留

STACK1ENDS;保留

CODESEGMENT;保留

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1;保留

START:

MOVAX,DATA;保留

MOVDS,AX;保留

MULTIPDA1,DA2,DA3;第一次宏调用

MULTIPDA1+2,DA2+2,DA3+4;第二次宏调用

;填入内容

MOVAX,4C00H;保留

INT21H;保留

CODEENDS;保留

ENDSTART;保留

编译源文件“SY6_5.asm”生成可执行文件“DebugSY6_5.exe”

SY6_5.ini文件内容:

u0,1E

d2868:

0,1F

g=0,1E

d2868:

0,1F

q

SY6_5.bat文件内容:

debugSY6_5.exe>SY6_5.txt

执行SY6_5.bat文件后可以获得SY6_5.txt文件;

SY6_5.txt文件内容:

-u0,1E

2868:

0000B86328MOVAX,2863

2868:

00038ED8MOVDS,AX

2868:

00058B160000MOVDX,[0000]

2868:

00098B0E0400MOVCX,[0004]

2868:

000D33DBXORBX,BX

2868:

000F33C0XORAX,AX

2868:

0011E307JCXZ001A

2868:

001303DAADDBX,DX

2868:

0015150000ADCAX,0000

2868:

0018E2F9LOOP0013

2868:

001A891E0800MOV[0008],BX

2868:

001EA30A00MOV[000A],AX

-d2868:

0,1F

2868:

0000B863288ED88B1600-008B0E040033DB33.c(..........3.3

2868:

0010C0E30703DA150000-E2F9891E0800A30A................

-g=0,1E

AX=0147BX=A800CX=0000DX=1234SP=0040BP=0000SI=0000DI=0000

DS=2863ES=2853SS=2864CS=2868IP=001ENVUPEIPLNZNAPENC

2868:

001EA30A00MOV[000A],AXDS:

000A=0000

-d2868:

0,1F

2868:

0000B863288ED88B1600-008B0E040033DB33.c(..........3.3

2868:

0010C0E30703DA150000-E2F9891E0800A30A................

-q

显然,上面忠实地记录了内存的情况并且展示了实验结果。

这是我做的第一个使用两次宏调用的汇编程序,对LOCAL命令有了深刻的理解,对以后编写更大的汇编程序奠定了基础。

实验6:

6、将上面所定义的“宏”,做成一个“宏库”文件,定义为:

MACROLIB.MAC,并用MACROLIB.MAC改写SY6_1.ASM,SY6_2.ASM,SY6_3.ASM,SY6_4.ASM和SY6_5.ASM,从新调试运行程序,验证所调用宏的功能实现情况,以及宏库“MACROLIB.MAC”的作用。

源文件MACROLIB.MAC文件内容:

.286;保留

MULTAX10MACRO

PUSHBX

SALAX,1

MOVBX,AX

SALAX,1

SALAX,1

ADDAX,BX

POPBX

ENDM

EXCHANGEMACROMEM1,MEM2,REG

MOVREG,MEM1

XCHGREG,MEM2

MOVMEM1,REG

ENDM

MULTAX10MACRO

PUSHBX

SALAX,1

MOVBX,AX

SALAX

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1