汇编实验1.docx

上传人:b****0 文档编号:403326 上传时间:2022-10-09 格式:DOCX 页数:17 大小:43.94KB
下载 相关 举报
汇编实验1.docx_第1页
第1页 / 共17页
汇编实验1.docx_第2页
第2页 / 共17页
汇编实验1.docx_第3页
第3页 / 共17页
汇编实验1.docx_第4页
第4页 / 共17页
汇编实验1.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

汇编实验1.docx

《汇编实验1.docx》由会员分享,可在线阅读,更多相关《汇编实验1.docx(17页珍藏版)》请在冰豆网上搜索。

汇编实验1.docx

汇编实验1

实验一顺序与分支程序设计

一、实验目的

1)掌握顺序程序设计方法。

2)掌握分支程序的结构及分支程序的设计,调试方法。

2)学习数据传送及算术和逻辑运算指令的用法。

3)熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。

二、实验内容

1)有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。

2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。

相加若有进位不存入存储单元。

3)在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。

4)要求同上,只是比较的数为有符号数。

5)将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。

本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。

6)从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。

7)从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。

a)当输入字符为A,则计算X+Y,并以十六进制形式显示出来

b)当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来

c)当输入字符为C,则计算X*Y,并以十六进制形式显示出来

d)当输入字符为D,则计算X/Y,并以十六进制形式显示出来

三、实验设备

PC机一台

四、实验准备

1)分析题目,将程序中的原始数据和最终结果的存取方法确定好。

2)画出流程图。

3)写出源程序。

4)对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。

五、实验步骤

1)输入源程序。

2)汇编、连接程序,生成.EXE文件,执行文件,检查结果。

六、实验报告的要求

1)列出源程序,说明程序的基本结构,包括程序中各部分的功能。

2)说明程序中各部分所用的算法。

3)说明主要符号和所用到寄存器的功能。

4)总结为什么在设计分支程序时必须解决三个问题:

判断、转向和定标号。

5)说明标志位CF、SF和OF的意义。

6)上机调试过程中遇到的问题是如何解决的。

7)对调试源程序的结果进行分析。

实验1-1

源程序:

DATASEGMENT

BUF1DW932AH;(以十六进制表示一个数的原码,包括符号位)

BUF2DW?

BUF3DW?

DATAENDS

STACK1SEGMENTPARASTACK

DW20HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,BUF1

MOVBX,AX

ANDAX,0FFFFH

JNSL;sf表示符号标志位,若最高位大于7时,则为负,该命令判断是否为负,为负则求反(加一),为正则原样输出

NEGAX

XORBX,0FFFFH

ORAX,8000H;保持符号位不变

ORBX,8000H

L:

MOVBUF2,BX

MOVBUF3,AX

PUSHAX

PUSHBX

MOVCX,2

LOP:

POPBX;将结果每一位通过循环移位显示在屏幕上

PUSHCX

MOVCX,4

LP:

PUSHCX

MOVCL,4

ROLBX,CL

MOVDL,BL

ANDDL,0FH

CMPDL,0AH

JBL2

ADDDL,07H

L2:

ADDDL,30H

MOVAH,02H

INT21H

POPCX

LOOPLP

MOVDL,''

INT21H

POPCX

LOOPLOP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

屏幕上显示的是BUF1数的反码和补码(十六进制,包括符号位)。

调试时发现结果显示成乱码,经过研究程序代码发现如果数字在A到F之间,则需要将内存数值加37。

实验1-2

源程序:

datasegment

Adw00ED1h

Bdw0BDE9h

dataends

stack1segmentparastack

dw20hdup(0)

stack1ends

codesegment

assumecs:

code,ds:

data,ss:

stack1,es:

data

start:

MOVAX,DATA

MOVDS,AX

MOVBX,A;(把A存储的单元放入BX寄存器中)

MOVAX,B;(把B存储的单元放入AX寄存器中)

ADDBX,AX

JCL0;cf是无符号的进位,当两数相加大于0ffffh,产生进位

MOVA,BX

L0:

MOVDX,BX;显示相加结果

ANDDX,0F000H

MOVCL,12

SHRDX,CL

CMPDX,0AH

JBL1

ADDDX,7H

L1:

ADDDX,30H

MOVAH,02H

INT21H

MOVDX,BX

ANDDX,0F00H

MOVCL,8

SHRDX,CL

CMPDX,0AH

JBL2

ADDDX,7H

L2:

ADDDX,30H

MOVAH,02H

INT21H

MOVDX,BX

ANDDX,0F0H

MOVCL,4

SHRDX,CL

CMPDX,0AH

JBL3

ADDDX,7H

L3:

ADDDX,30H

MOVAH,02H

INT21H

MOVDX,BX

ANDDX,0FH

CMPDX,0AH

JBL4

ADDDX,7H

L4:

ADDDX,30H

MOVAH,02H

INT21H

movah,4ch

int21h

codeends

endstart

运行结果:

实验1-3

源代码:

datasegment

BUFDB03EH,060H,93H

MAXDB00H

dataends

stack1segmentparastack

dw20hdup(0)

stack1ends

codesegment

assumecs:

code,ds:

data,ss:

stack1,es:

data

START:

MOVAX,DATA

MOVDS,AX

ANDAX,0000H

MOVAL,BUF

MOVMAX,AL

MOVBL,BUF+1

CMPMAX,BL;找到最大的数

JAEL1

MOVMAX,BL

L1:

MOVBL,BUF+2

CMPMAX,BL

JAEL2;显示最大的数

MOVMAX,BL

L2:

ANDDX,0000H

MOVDL,MAX

ANDDL,0F0H

MOVCL,4

SHRDL,CL

CMPDL,0AH

JBL3

ADDDL,7H

L3:

ADDDL,30H

MOVAH,02H

INT21H

MOVDL,MAX

ANDDL,0FH

CMPDL,0AH

JBL4

ADDDL,7H

L4:

ADDDL,30H

MOVAH,02H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

实验1-4

源代码:

datasegment

BUFDB-34H,3AH,-43H;转换成补码

MAXDB00H

dataends

stack1segmentparastack

dw20hdup(0)

stack1ends

codesegment

assumecs:

code,ds:

data,ss:

stack1,es:

data

START:

MOVAX,DATA

MOVDS,AX

ANDAX,0000H

MOVAL,BUF;通过对所有的数取阶码比较大小

ADDAL,80H

MOVMAX,AL

MOVBL,BUF+1

ADDBL,80H

CMPMAX,BL

JAEL1

MOVMAX,BL

L1:

MOVBL,BUF+2

ADDBL,80H

CMPMAX,BL

JAEL2

MOVMAX,BL

L2:

ANDDX,0000H

MOVDL,MAX

SUBDL,80H;包含有cmp功能,对最大的数减去80h(取回原码)

JAEL3

MOVBL,DL

MOVDL,'-';如果是负数显示符号

MOVAH,02H

INT21H

MOVDL,BL

NEGDL;求补(针对带符号数)

L3:

MOVBL,DL;显示最大的数

ANDDL,0F0H

MOVCL,4

SHRDL,CL

ADDDL,30H

MOVAH,02H

INT21H

MOVDL,BL

ANDDL,0FH

CMPDL,0AH

JBL4

ADDDL,7H

L4:

ADDDL,30H

MOVAH,02H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

实验1-5

源程序:

DATASEGMENT

BUFDB10DUP(0)

BFDB00011110B,11111111B,6DUP(0),00110000B,00000001B

DATAENDS

STACK1SEGMENTPARASTACK

DW20HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVAX,100H

MOVES,AX

MOVCX,10

MOVDI,0

MOVSI,9

LOP:

MOVBX,CX

;MOVAL,BF+[BX]-1

MOVAL,ES:

-1[BX]

ANDAL,0FFH;mov不影响标志位

JPL1;pf为奇偶标志位,当位数为偶数时为1

LEABX,BUF

ADDBX,DI

MOV[BX],AL

INCDI

JMPL2

L1:

MOV[BUF+SI],AL

DECSI

L2:

LOOPLOP

MOVCX,10

LP:

MOVBX,CX

MOVAL,BUF+[BX]-1

MOVES:

-1[BX],AL

LOOPLP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

1、对bf进行检验,再存入buf

2、对指定的内存单元进行检验,存回指定的内存单元

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

当前位置:首页 > 医药卫生 > 基础医学

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

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