汇编实验1

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

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

一、实验目的

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 按下列公式计算。

⎪⎪⎩⎪⎪⎨⎧===-=+=)

6(2/)

5()4(2)3(2222X X X X X X X X X X 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

源程序:

DATA SEGMENT

BUF1 DW 932AH ;(以十六进制表示一个数的原码,包括符号位) BUF2 DW ?

BUF3 DW ?

DATA ENDS

STACK1 SEGMENT PARA STACK

DW 20H DUP(0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1,ES:DATA

START:

MOV AX,DATA

MOV DS,AX

MOV AX,BUF1

MOV BX,AX

AND AX,0FFFFH

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

NEG AX

XOR BX,0FFFFH

OR AX,8000H ;保持符号位不变

OR BX,8000H

L:MOV BUF2,BX

MOV BUF3,AX

PUSH AX

PUSH BX

MOV CX,2

LOP:POP BX;将结果每一位通过循环移位显示在屏幕上

PUSH CX

MOV CX,4

MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH CMP DL,0AH L2

ADD DL,07H L2:ADD DL,30H MOV AH,02H INT 21H

POP CX

LOOP LP

MOV DL,' ' INT 21H

LOOP LOP

MOV AH,4CH

INT 21H

CODE ENDS

END START

运行结果:

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

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

实验1-2

源程序:

data segment

A dw 00ED1h

B dw 0BDE9h

data ends

stack1 segment para stack

dw 20h dup(0)

stack1 ends

code segment

assume cs:code,ds:data,ss:stack1,es:data

start:

MOV AX,DATA

MOV DS,AX

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

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

ADD BX,AX

JC L0;cf是无符号的进位,当两数相加大于0ffffh,产生进位 MOV A,BX

L0:MOV DX,BX;显示相加结果

AND DX,0F000H

MOV CL,12

相关文档
最新文档