您的当前位置:首页正文

汇编语言上机实验内容

来源:帮我找美食网
 实验一 上机操作

一、实验目的

把握汇编语言程序编辑、汇编、连接、运行和利用DEBUG调试程序的方式。 二、实验设备

PC机及相应的软件。 三、实验内容及步骤

1、编辑一个指定的汇编语言源程序,并对其进行汇编、连接和运行。

2、利用DEBUG进行程序调试,把握经常使用命令的利用方式,观看运行结果。 3、汇编语言上机操作,见图1-1 汇编语言上机操作流程。

上机操作进程:

开始 输入cmd 确认后显示:

C:\\Documents and setting\\Administrator>- 输入 cd c:\\masm 后显示: c:\\masm>- c:\\masm>EDIT c:\\masm>MASM ABC;

假设有语法错,回EDIT下改该程序 c:\\masm>LINK ABC; 假设有错,回EDIT下改程序 c:\\masm>ABC

假设运行结果错,回EDIT下改程序 或在DEBUG下调试,找缘故。 c:\\masm>DEBUG

手写源程序

编辑源程序 EDIT 汇编源程序 MASM 有汇编错误信息 ? Y N 形成目标程序 连接目标程序 LINK 有连接错误信息 Y ? N 形成可执行程序 ABC. EXE 装入可执行程序到内存,并执行 运行结果正确 ? Y 下一程序 N 用 DEBUG 调试程序 ? N Y 用 DEBUG 调试可执行程序 DEBUG 找到原因

图 1-1 汇编语言上机操作流程

汇编语言程序举例

例1:将BL寄放器的内容按二进制形式显示出来。 设:(BL)=01010011B

分析:采纳2号功能挪用,别离输出30 31 30 31 30 30 31 31 显示:01010011

参考程序:

CODE SEGMENT

ASSUME CS: CODE

START:MOV CX ,8 ;显示字符个数为8 MOV BL ,53H

NEXT: SHL BL ,1 ;将显示位移至CF中 JC ONE ;CF=1?

MOV DL ,30H ;CF=0, 将0的ASCII放在DL中 JMP EXIT

ONE: MOV DL ,31H ;CF=1, 将1的ASCII放在DL中 EXIT: MOV AH ,2

INT 21H ;挪用DOS功能显示 DEC CX ;循环次数减1 JNZ NEXT ;判定是不是终止

MOV AH,4CH ;返回DOS

INT 21H CODE ENDS

END START

上机操作:

c:\\masm>EDIT ;编辑源程序 c:\\masm>MASM ShowBL ;汇编成 Microsoft (R) Macro Assembler Version

Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. 48912 + 447243 Bytes symbol space free 0 Warning Errors 0 Severe Errors

c:\\masm>LINK ShowBL ;连接成 Microsoft (R) Overlay Linker Version

Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segment

c:\\masm>ShowBL ;装载并执行 01010011 ;屏幕显示 c:\\masm>-

在DEBUG下查看的装入情形:

c:\\masm>DEBUG

- R ;查看当前寄放器内容

AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B51 ES=0B51 SS=0B61 CS=0B61 IP=0000 NV UP EI PL NZ NA PO NC B353 MOV BL,53

- U CS:0 ;查看程序 0B61:0000 B353 MOV BL,53 0B61:0002 B90800 MOV CX,0008 0B61:0005 D0E3 SHL BL,1 0B61:0007 7205 JB 000E …….

0B61:0017 B44C MOV AH,4C 0B61:0019 CD21 INT 21 …….

-G ;执行程序 01010011

Program terminated normally -

例2 :将某段中的字符串“Hello!”传送到另一段中。 编写完整的汇编语言程序,完成内存数据块传送功能。 参考程序:

AA SEGMENT ;数据段1 XX DB ‘Hello!’ ;概念源串 AA ENDS

BB SEGMENT ;数据段2 YY DB 6 dup (?) ;概念目的缓冲区 BB ENDS

CC SEGMENT ;代码段

ASSUME CS:CC,DS:AA,ES:BB ;指示程序中标号,变量所在段 START:CLD ;设置传送方向

MOV AX , AA ;DS:SI ← 源串首地址 MOV DS , AX LEA SI , XX

MOV AX , SEG YY ;ES:DI ← 目的首地址 MOV ES , AX

MOV DI , OFFSET YY

MOV CX , 6 ;CX ← 串的长度 REP MOVSB ;串传送

MOV AH , 4CH ;挪用4CH系统功能,返回DOS INT 21H CC ENDS

END START ;指示程序终止和程序入口

c:\\masm>EDIT ;编辑源程序

c:\\masm>MASM hello ; ;汇编源程序

Microsoft (R) Macro Assembler Version

Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. 49860 + 421241 Bytes symbol space free 0 Warning Errors 0 Severe Errors

c:\\masm>LINK hello ;连接程序

Microsoft (R) Overlay Linker Version

Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segment c:\\masm>hello ;执行程序 c:\\masm>-

c:\\masm>DEBUG ;利用DEBUG查看结果 -U ;查看程序代码 129F:0000 FC CLD

129F:0001 B89D12 MOV AX,129D 129F:0004 8ED8 MOV DS,AX 129F:0006 8D360000 LEA SI, [ 0000 ] 129F:000A B89E12 MOV AX,129E 129F:000D 8EC0 MOV ES,AX 129F:000F BF0000 MOV DI,0000 129F:0012 B90600 MOV CX,0006 129F:0015 F3 REPZ

CLD MOV AX, AA MOV DS, AX LEA SI, XX MOV AX, SEG YY MOV ES, AX MOV DI,OFFSET YY MOV CX, 6 REP MOVSB MOV AH,4CH INT 21H 129F:0016 A4 MOVSB 129F:0017 B44C MOV AH,4C 129F:0019 CD21 INT 21 对应的源程序见文本框中所示。

-D 129D:0 L20 ;执行程序前,查看源串内容 129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!....... 129D:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -D 129E:0 L20 ;执行程序前,查看目的串 129E:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..................

129E:0010 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .... ...6....... -

-G ;执行程序 Program terminated normally

-D 129D : 0 L50 ;从源串从头查看

129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!......... 129D:0010 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!....... 129D:0020 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF.....6...... 129D:0030 00 00 B9 06 00 F3 A4 B4-4C CD 21 09 E8 08 00 03 ......L.!...... 129D:0040 F1 E8 03 00 3C 0D C3 AC-E8 EC F8 75 04 3C 3B 75 ...<...u.<;u -

-U ;查看程序代码 129F:0000 FC CLD

129F:0001 B89D12 MOV AX,129D 129F:0004 8ED8 MOV DS,AX 129F:0006 8D360000 LEA SI,[0000] 129F:000A B89E12 MOV AX,129E 129F:000D 8EC0 MOV ES,AX 129F:000F BF0000 MOV DI,0000 129F:0012 B90600 MOV CX,0006 129F:0015 F3 REPZ 129F:0016 A4 MOVSB 129F:0017 B44C MOV AH, 4C 129F:0019 CD21 INT 21H

AA SEGMENT XX DB 'Hello!’ AA ENDS BB SEGMENT YY DB 6 DUP (?) BB ENDS CC SEGMENT ASSUME CS:CC,DS:AA,ES:BB START: CLD MOV AX , AA MOV DS , AX LEA SI , XX MOV AX , SEG YY MOV ES , AX MOV DI , OFFSET YY MOV CX , 6 REP MOVSB MOV AH , 4CH INT 21H CC ENDS 对应的源程序见文本框中所示。

实验二 循环与分支程序设计实验

一、实验目的

加深对循环和分支程序结构的明白得,把握循环和分支结构程序设计的方式,熟练汇编语言程序上机调试的方式和进程。 二、实验设备

PC机及相应的软件。 三、实验内容及步骤

1、编写一个求某数据区内负数个数的汇编语言源程序。

要求:在数据区概念假设干个字节数据,在数据以后概念一个字单元寄存你输入的数据个数,在数据个数以后的单元寄存结果。

按要求编写汇编语言源程序,并对其进行上机调试,观看运行结果并记录。 参考程序: DATA SEGMENT

DAT1 DB 61H,12H,78H,9AH,81H,0D6H,00H,56H,...... NUM DW $-DAT1 RESULT DB ? DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV SI,OFFSET DAT1 MOV CX,NUM MOV BL,0 LP1: MOV AL,[SI] TEST AL,80H JE LP2

INC BL

LP2: INC SI

LOOP LP1 MOV RESULT,BL MOV AH,4CH INT 21H CODE ENDS END START

二、修改上述源程序,使其能别离求出数据区中的正数、负数和零的个数。并将结果寄存在数据个数后面持续的三个单元。写出源程序并对其进行上机调试,观看运行结果并记录。

实验三 程序设计综合实验

实验内容:完成教材中第五第六章指定课后相关作业,其中P243页习题需编写子程序完成完整程序。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top