搜档网
当前位置:搜档网 › 汇编程序设计实验

汇编程序设计实验

汇编程序设计实验
汇编程序设计实验

汇编程序设计实验

实验二简单程序设计

实验目的:熟悉汇编程序设计的基本过程。

实验内容:

1、NUMB1 DB ?

NUMB2 DW 20 DUP(?)

NUMB3 DB ‘USB’

MOV AX,TYPE NUMB1

2、编写人机对话程序 WHAT IS YOUR NAME? 输入:My name is .

DSEG SEGMENT

DATA DB 0AH,0DH,'WHAT IS YOUR NAME?$'

BUF DB 81

DB ?

DB 80 DUP(0)

DSEG ENDS

STACK1 SEGMENT

DB 200 DUP(0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DSEG,SS:STACK1

START: MOV AX,DSEG

MOV DS,AX

LEA DX,DATA

MOV AH,09H

INT 21H

LEA DX,BUF

MOV AH,0AH

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

思考:汇编程序设计有那些步骤,应该注意什么?

实验三程序设计练习一

实验目的:1.掌握汇编语言程序的结构和各种结构程序设计的方法;

2.熟悉汇编语言程序设计全过程;

3.用汇编语言进行程序设计。

实验内容:

EX1:将变量A=10011010B的数据以二进制形式在显示器上输出。

EX2:1+2+22+23+……+2n-1=255,求N值并显示出来。

EX3:已知在以BUF为首地地址的字节存储区中,存放着一个以‘$’作结束标志的字符串,编写程序,显示该字符串,并要求将小写字母以大写字母形式显示出来。(小写a为61H,大写A 为41H。)

EX4:在以PROG为首址的字节存储区中存放着一段汇编源程序,最后以CTRL—Z(其ASCII码为1AH),统计“MOV”出现的次数,并将统计结果送入字变量NUM中。

EX5:已知m×n矩阵A的元素aij 按行序存放在以BUFA为首地址的字节存储区中,试编写程序,求每行元素之和Si,其中aij为8位二进制数。

EX1:将变量A=10011010B的数据以二进制形式在显示器上输出。

DATA SEGMENT

A D

B 10011010B

B DB '(A)=$'

C DB 'B',0DH,0AH,'$'

DATA ENDS

STACK1 SEGMENT

DB 200 DUP(0)

STACK1 ENDS

CODE SEGMENT

ASSUME DS:DATA,SS:STACK,CS:CODE

START: MOV AX,DATA

MOV DS,AX

LEA DX,B

MOV AH,09H

INT 21H

MOV BL,A

MOV CL,8

NEXT: MOV DL,0

SAL BL,1

RCL DL,1

ADD DL,30H

MOV AH,2

INT 21H

DEC CL

JNE NEXT

LEA DX,C

MOV AH,9

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

EX2:1+2+22+23+……+2n-1=255,求N值并显示出来。CODE SEGMENT

ASSUME CS: CODE

START: MOV AX,1

MOV BX,2

ADD AX,BX

MOV CX,1

L1: INC CX

SAL BX,1

ADD AX,BX

CMP AX,255

JB L1

ADD CX,1

MOV DX,0

L2: CMP CX,0AH

JNAE L3

INC DX

SUB CX,0AH

JMP L2

L3: CMP DL,0

JE B1

OR DL,30H

MOV AH,02H

INT 21H

B1: ADD CX,30H

MOV DL,CL

MOV AH,02H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

EX3:已知在以BUF为首地地址的字节存储区中,存放着一个以‘$’作结束标志的字符串,编写程序,显示该字符串,并要求将小写字母以大写字母形式显示出来。(小写a为61H,大写A 为41H。)

STACK1 SEGMENT

DB 200 DUP(0)

STACK1 ENDS

DATA SEGMENT

BUF DB 'add AX,BX sub CX,10 MOV dx,1234h END$'

DATA ENDS

CODE SEGMENT

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

BEGIN: MOV AX,DATA

MOV DS,AX

LEA BX,BUF

LOPA: MOV DL,[BX]

CMP DL,'$'

JE EXIT

CMP DL, ‘a’

JB N

CMP DL, ‘z’

JA N

SUB DL,20H

N: MOV AH,2

INT 21H

INC BX

JMP LOPA

EXIT: MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

EX4:在以PROG为首址的字节存储区中存放着一段汇编源程序,最后以CTRL—Z(其ASCII码为1AH),统计“MOV”出现的次数,并将统计结果送入字变量NUM中。

STACK1 SEGMENT

DB 200 DUP(0)

STACK1 ENDS

DATA SEGMENT

PROG DB 'MOV AX,DATA',0DH,'MOV DX,AX',0DH,

'MOV AX,0',0DH,'MOV BX,2',0DH,

'MOV CX,10',0DH,'ADD AX,BX',0DH

DB '...'

DB 1AH

NUM DW 0

DATA ENDS

CODE SEGMENT

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

BEGIN: MOV AX,DATA

MOV DS,AX

MOV AX,0

MOV SI,OFFSET PROG

LOPA: CMP BYTE PTR [SI], 1AH

JE EXIT

CMP BYTE PTR [SI], 'M'

JNE NEXT

CMP BYTE PTR [SI+1], 'O'

JNE NEXT

CMP BYTE PTR [SI+2], 'V'

JNE NEXT

INC AX

ADD SI,2

NEXT: INC SI

JMP LOPA

EXIT: MOV NUM,AX

MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

EX5:已知m×n矩阵A的元素aij 按行序存放在以BUFA为首地址的字节存储区中,试编写程序,求每行元素之和Si,其中aij为8位二进制数。

STACK1 SEGMENT

DB 200 DUP(0)

STACK1 ENDS

DATA SEGMENT

BUFA DB 11H,12H,13H,14H,15H

DB 21H,22H,23H,24H,25H

DB 31H,32H,33H,34H,35H

DB 41H,42H,43H,44H,45H

M=4

N=5

BUFS DW M DUP(?)

DATA ENDS

CODE SEGMENT

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

BEGIN: MOV AX,DATA

MOV DS,AX

LEA SI,BUFA

LEA DI,BUFS

MOV BX,1

LOPI: MOV DX,0

MOV CX,1

LOPJ: MOV AL,[SI]

CBW

ADD DX,AX

INC SI

INC CX

CMP CX,N

JBE LOPJ

MOV [DI],DX

ADD DI,2

INC BX

CMP BX,M

JBE LOPI

MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

实验四程序设计练习二

实验目的:1.掌握汇编语言程序的结构和各种结构程序设计的方法;

2.熟悉汇编语言程序设计全过程;

3.用汇编语言进行程序设计。

实验内容:

EX7:在以BUF为首址的字节存储区中存放有N个无符号数X1,X2,……Xn,现需将它们按从小到大的顺序排列在BUF存储区中,试编写程序。

《IBM-PC汇编语言程序设计》沈美明温冬婵编著第五章课后练习

5.3 5.5 5.9 5.12 5.13

EX7:在以BUF为首址的字节存储区中存放有N个无符号数X1,X2,……Xn,现需将它们按从小到大的顺序排列在BUF存储区中,试编写程序。

STACK1 SEGMENT

DB 200 DUP(0)

STACK1 ENDS

DATA SEGMENT

BUF DB 30H,10H,40H,20H,50H,70H,60H,90H,80H,0,0FFH

N=$-BUF

DATA ENDS

CODE SEGMENT

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

BEGIN: MOV AX,DATA

MOV DS,AX

MOV SI,1

LOPI: MOV DI,SI

INC DI

MOV AL,[BUF+SI-1]

LOPJ: CMP AL,[BUF+DI-1]

JBE NEXT ;无符号数

XCHG [BUF+DI-1],AL

MOV [BUF+SI-1],AL

NEXT: INC DI

CMP DI,N

JBE LOPJ

INC SI

CMP SI,N-1

JBE LOPI

MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

以下为《IBM-PC汇编语言程序设计》沈美明温冬婵编著第五章课后练习

5.3

DSEG SEGMENT

STORE DB 4 DUP(?)

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

BEGIN: MOV AX,DSEG

MOV DS,AX

MOV CL,4

MOV CH,4

LEA BX,STORE

A1: MOV DX,AX

AND DX,000FH

MOV BYTE PTR [BX],DL

INC BX

SHR AX,CL

DEC CH

JNZ A1

B1: MOV DL,STORE

MOV CL,STORE+1

MOV BL,STORE+2

MOV AL,STORE+3

MOV AH,4CH

INT 21H

CSEG ENDS

END BEGIN

5.5

BEGIN: MOV AH,1

INT 21H

AND AL,0FH

CBW

MOV CX,AX

JCXZ EXIT

MOV AH,02H

INT 21H

LOOP BELL

EXIT: MOV AH,4CH

INT 21H

5.9

MOV BX,0

MOV CH,4

MOV CL,4

INPUT: SHL BX,CL

MOV AH,1

INT 21H

CMP AL,39H

JA ATOF

AND AL,0FH

JMP BINARY

ATOF: AND AL,0FH

ADD AL,9 BINARY: OR BL,AL

DEC CH

JNE INPUT

DISP1: MOV CX,16

DISP2: MOV DL,0

ROL BX,1

RCL DL,1

OR DL,30H

MOV AH,02H

INT 21H

LOOP DISP2

MOV AH,4CH

INT 21H

5.12

DSEG SEGMENT

MEM DW 100 DUP(?) DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR ASSUME CS:CSEG,DS:DSEG START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

BEGIN:MOV SI,(100-1)*2

MOV BX,-2

MOV CX,100

COMP:ADD BX,2

CMP MEM[BX],0

JZ CONS

LOOP COMP

JMP FINISH

CONS:MOV DI,BX

CONS1:CMP DI,SI

JAE NOMOV

MOV AX,MEM[DI+2]

MOV MEM[DI],AX

ADD DI,2

JMP CONS1 NOMOV: MOV WORD PTR [SI],0 LOOP COMP

FINISH:RET

MAIN ENDP

CSEG ENDS

END START

5.13

DSEG SEGMENT

STRING DB 100 DUP(?) DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CSEG,DS:DSEG START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

BEGIN:MOV CX,100

MOV SI,0

REPEAT:MOV AL,STRING[SI] CMP AL,30H

JB GOON

CMP AL,39H

JA GOON

OR CL,20H

JMP EXIT

GOON:INC SI

AND CL,0DFH

EXIT:RET

MAIN ENDP

CSEG ENDS

END START

实验五程序设计练习三

实验目的:1.掌握汇编语言程序的结构和各种结构程序设计的方法;

2.熟悉汇编语言程序设计全过程;

3.用汇编语言进行程序设计。

实验内容:

《IBM-PC汇编语言程序设计》沈美明温冬婵编著第五章课后练习 5.14 5.16 5.18 5.19 5.21 5.23

5.14

DSEG SEGMENT

TAB DW 100H DUP(?)

DATA DW ?

COUNT DW 0

DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CSEG,DS:DSEG

START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

BEGIN:MOV BX,100H

MOV DI,0

NEXT: MOV DX,0

MOV SI,0

MOV AX,TAB[DI]

COMP: CMP TAB[SI],AX

JNE ADDR

INC DX

ADDR: ADD SI,2

LOOP COMP

CMP DX,COUNT

JLE DONE

MOV COUNT, DX

MOV DATA,AX

DONE: ADD DI,2

DEC BX

JNZ NEXT

MOV CX,COUNT

MOV AX,DATA

RET

MAIN ENDP

CSEG ENDS

END START

5.16

DSEG SEGMENT

DATA DW 100H DUP(?)

DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CSEG,DS:DSEG

START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX BEGIN: MOV CX,0FFH

MOV DX,0

MOV SI,0

MOV AX,DATA[SI] CWD NEXT: ADD SI,2

ADD AX,DATA[SI]

ADC DX,0

JO ERROR

LOOP NEXT

MOV CX,100H

IDIV CX

MOV SI,0

COMP: CMP AX,DATA[SI]

JLE NO

INC BX

NO:ADD SI,2

LOOP COMP

RET

ERROR: MOV DL,’!’

MOV AH,02H

INT 21H

RET

MAIN ENDP

CSEG ENDS

END START

5.18

DSEG SEGMENT

GRADE DW 30 DUP(?)

RANK DW 30 DUP(0)

DSEG ENDS

SSEG SEGMENT

CSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CSEG,DS:DSEG

START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX BEGIN: MOV DI,0

MOV BX,30

LOOP1:MOV CX,30

MOV SI,0

MOV AX,GRADE[DI] MOV DX,0

LOOP2: CMP GRADE[SI],AX

JBE GOON

INC DX

GOON: ADD SI,2

LOOP LOOP2

INC DX

MOV RANK[DI],DX ADD DI,2

JNZ LOOP1 RET

MAIN ENDP

CSEG ENDS

END START

5.19

DSEG SEGMENT

A DW 15 DUP(?)

B DW 20 DUP(?)

C DW 15 DUP(?)

DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CSEG,DS:DSEG START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG MOV DS,AX BEGIN: MOV SI,0

MOV BX,0

MOV DX,15 LOOP1: MOV DI,0

MOV CX,20

MOV AX,A[SI] LOOP2: CMP B[DI],AX

JNE NO

MOV C[BX],AX ADD BX,2 NO: ADD DI,2

LOOP LOOP2

ADD SI,2

DEC DX

JNZ LOOP1

RET

MAIN ENDP

CSEG ENDS

END START

5.21

DSEG SEGMENT

ARRAY DW 3 DUP(?)

DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CSEG,DS:DSEG

START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

MOV CX,3

LEA SI,ARRAY

BEGIN: MOV BL,4

MOV DI,4

MOV DL,’‘

MOV AH,02

INT 21H

MOV DX,0

INPUT: MOV AH,01

INT 21H

AND AL,0FH

SHL DX,BL

OR DL,AL

DEC DI

JNE INPUT

MOV AH,02

MOV DL,“ “ INT 21H

MOV [SI],DX

ADD SI,2

LOOP BEGIN

COMPA: LEA SI,ARRAY

MOV DX,0

MOV AX,[SI]

MOV BX,[SI+2] CMP AX,BX

JNE NEXT1

INC DX

NEXT1: CMP [SI+4],AX

JNE NEXT2

INC DX

NEXT2:CMP [SI+4],BX

JNE NUM

INC DX

NUM: CMP DX,3

JL DISP

DEC DX

DISP: MOV AH,2

ADD DL,30H

INT 21H

RET

MAIN ENDP

CSEG ENDS

END START

5.23

DSEG SEGMENT

A DW ?

B DW ?

DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CSEG,DS:DSEG

START:PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

BEGIN: MOV AX,A

MOV BX,B

XOR AX,BX

TEST AX,0001

JZ CLASS

TEST BX,0001

JZ EXIT

XCHG BX,A

MOV B,BX

JMP EXIT

CLASS: TEST BX,0001

JZ EXIT

INC B

INC A

EXIT: RET

MAIN ENDP

CSEG ENDS

END START

实验六 A I/O端口译码一.实验目的

1.掌握I/O端口译码电路的工作原理;

2.了解8086总线操作的时序原理。

二.硬件连线

本实验用到一片74HC74,连线如下:

1脚(CR) 接地址译码输出Y5(2A8~2AFH),

2脚(D) 接VCC

3脚(CLK) 接地址译码输出Y4(2A0~2A7H),

4脚(PR) 接VCC,

5脚(Q) 接发光二极管L0R。

三.实验原理

CPU对外设的操作是通过I/O端口进行的,每个端口有一个编号,称为端口号,CPU的地址线经过端口译码电路输出一负脉冲选中某一端口。任何时刻都仅有一根端口译码输出为低,其余均为高,被选中的端口可进行数据传送操作。例如,执行MOV DX,2A0H; OUT DX, AL(或IN AL,DX)则Y4输出一低电平脉冲。在本实验连线中,Y5的低脉冲使D触发器清0,Y4的低脉冲使D触发器置1。

四.实验编程及实验内容

编一程序,使发光二极管闪烁发光,若按任意键则程序结束。观察实验现象,用示波器观察L0R波形。

五.思考题

为什么要用D触发器?若直接观察Y4或Y5的波形可否?

实验十三键盘及数码LED动态扫描

一.实验目的

1.掌握数码LED的动态扫描显示原理;

2.掌握简单键盘电路的行列扫描原理;

3.进一步理解无条件传送方式的应用。

74HC273:位型口Q1~Q8接数码LED0~LED7,,同时Q1~Q3接键盘电路KB0~KB2,字型口Q1~Q8接数码LED的SA~DP。

74HC244:IN1~IN8接键盘电路的KEY0~KEY7。

74HC32用到三个门,接法如下:

三.实验原理

为了节省输出端口数,数码LED显示一般采用动态扫描的方法,将所有数码LED 的共阴极接在一个位型输出口上,将所有数码管的相同段接在一起作为字型口,软件控制每个数码LED轮流显示,任一时刻只一个数码亮,但扫描速度足够快时,视觉效果是8个数码LED同时亮。

同样道理,为节省输入输出端口数,键盘电路一般采用一个输出口加一个输入口的行列扫描电路。交叉线上的按键按下时则行线、列线接通,松开时行线、列线不通。无按键时输入口读入的全为高电平。输出口每次输出一位低电平,其余高电平,这条输出线上若有键按下,则对应输入线为低电平,这样就可以判断出按键位置。因为机械按键的特性在软件上必须有消除抖动的功能。

四.实验编程及实验内容

1.编程将内存中8个字节的缓冲区中的数字显示在数码LED上。

2.编程将实验箱小键盘的按键存入内存8个字节的缓冲区中。

3.综合1、2的功能,若小键盘按的是数字键则显示在数码LED上,由右向左循环显示,若不是数字键则不反应。

实验六 B 存储器读写

一.实验目的

1.熟悉6264静态RAM的使用方法,掌握PC机外存扩充手段;

2.了解PC机62芯总线信号的定义,领会总线及总线标准的意义;

3.通过对硬件电路分析,了解总线的工作时序。

6264地址与拨码开关关系:

本实验中必须先将拨码开关拨在E0000H地址,开实验箱电源,再开PC机电源。三.实验编程及实验内容

将字符A~Z循环存入6264中,然后再将6264中的内容读出显示在主机屏幕上。

实验七 8259中断

一.实验目的

1.掌握8086及PC机中断处理系统的基本原理;

2.掌握8259中断控制器的基本原理与应用;

3.掌握中断服务子程序的编写方法。

二.硬件连线

单脉冲发生器的正脉冲信号接PC总线的IRQ7。

三.实验原理

PC机中用8259进行外部中断源的控制,本实验使用IRQ7。

四.实验编程及实验内容

1.每产生一次中断请求,则在屏幕上显示“THIS IS A IRQ7!”,10次后结

束,主机键盘按任意键也结束。

2.将实验十二改为中断方式,即单脉冲开关产生中断请求信号时,才将K0~K7

状态读入并显示。

实验十五键盘中断

一.实验目的

1.掌握PC中键盘的硬件、软件原理;

2.掌握PC机中断矢量的读取和设置的方法。

二.硬件连线

本实验不需使用实验箱。

三.实验原理

PC机键盘用5芯电缆与主机连接,用IRQ1中断方式输入扫描码,按下时为通码,D7=0,松开时为断码,D7=1,每个按键对应一个唯一的扫描码。输入扫描码的端口为60H,控制口为61H,D7控制键盘复位,D6控制键盘时钟。

四.实验编程及实验内容

1.编程将PC机上按键对应的扫描码显示在屏幕上,ESC(01H)则结束。

若PC机上按键为字母键则大、小号各显示一次,若不是字母键则不显示,ESC结束实验

八可编程定时计数器

一.实验目的

1.掌握可编程定时计数器芯片8253的基本工作原理和编程方法;

2.了解PC机中扬声器电路的基本原理。

二.硬件连线

CS8253 接地址译码Y0(280~287H),

CLK 接1MHz脉冲,

GATE0 接VCC,

OUT0 用示波器观察。

三.实验原理

8253是可编程定时计数器,是16位二进制/10进制减计数器,有3个通道6种工作方式,输出波形不一样。本实验中计数器0端口号为280H,计数器1为281H,计数器2为282H,控制口为283H。

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

汇编语言学习知识程序设计实验

目录 目录 (1) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

汇编语言程序设计实验七

实验七子程序的应用 【实验目的】 1.掌握子程序的定义 2.掌握子程序中的参数传递 3.掌握子程序的调用。 【实验环境】 配有汇编语言开发环境的计算机 【实验内容】 十进制数到十六进制数转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。 【实验过程、结果】 ;程序名:t6-2.asm ;功能:从键盘获取一个十进制数, ;用十六进制的形式输出 decihex segment assume cs:decihex ;主程序部分 main proc far call decibin call crlf

call binihex call crlf main endp ;*************************** decibin proc near mov bx,0 ;从键盘获取一个数字,转换为二进制 ;结果放在bx寄存器中 newchar: mov ah,1 int 21h ;从键盘输入一个字符并显示在屏幕上 sub al,30h ;转换成ASCII码 jl exit cmp al,9d jg exit cbw ;从al扩展到ax,数字现在存放在ax中 xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar

exit: ret decibin endp ;子程序结束 ;将二进制转换为十六进制子程序binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl ;循环移位 mov al,bl and al,0fh add al,30h cmp al,3ah jl printint add al,7h printint: mov dl,al mov ah,2 int 21h dec ch jnz rotate ret

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H +

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

汇编语言 实验七子程序设计2

实验七子程序设计 实验类型:综合性 实验目的: 1、掌握主程序与子程序之间的调用关系及调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、掌握通过堆栈转送参数的方法。 实验步骤: 1、进入DOS环境 2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用 3、启动EDIT编辑器输入程序代码 4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm) 5、运行命令MASM CHEN.ASM生成OBJ文件 6、如果出错请回到第3步再纠正错误 7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE文件 8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容) 9、执行反汇编U 10、查看程序结束地址 11、运行G 命令运行程序 12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。 实验内容: 从键盘输入一组十进制数据,按从小到大的顺序排列,并以十进制的形式输出。 要求:输入过程有键盘锁;输入、输出有提示;输入和输出之间换行。

data segment a dw 7 dup(?) data ends decihex segment main proc far assume cs:decihex,ds:data push ds mov ax,0 push ax mov ax,data mov ds,ax mov cx,07h lea si,a loop1:call decibin mov [si],bx add si,2 call crlf loop loop1 ;******************************** mov cx,7 dec cx

实验七子程序设计

实验七:子程序设计 一、实验目的: 通过运行例题程序,了解并掌握简单子程序的编写以及调用方法。 二、实验基础知识: 1、什么是子程序? 子程序又称为过程,是能完成特定功能有一定通用性的程序段,在需要时能被其它程序调用。调用子程序的程序常称为主程序。一般把源程序中反复出现的程序段或常用的功能独立的程序段设计成子程序供用户使用。 这样可以简化源程序结构、节省目标程序的存储空间,提高程序设计的效率。子程序结构也是模块化程序设计的基础。 2、子程序的定义 子程序的定义是由过程定义伪指令PROC和ENDP实现,格式如下: 过程名PROC [NEAR|FAR] …;过程体(实现某功能的指令集合体) 过程名ENDP 说明:NEAR属性的过程只能被相同代码段的其他程序调用,FAR属性的过程可以被不同代码段的程序调用。过程体中必须包括RET(返回主程序)指令。其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。(1)子程序和主程序在同一个代码段中,则子程序定义为NEAR属性。 (2)子程序和主程序不在同一个代码段中,则子程序定义为FAR属性。 (3)主程序通常定义为FAR属性,这是因为主程序被看作DOS调用的一个子程序,以便执行完返回DOS。 3、子程序的设计方法 子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主程序执行终止后的位置。 为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。子程序说明信息一般包括以下内容: (1)子程序名 (2)功能描述 (3)入口和出口参数 (4)调用注意事项和说明等 子程序实例: ;子程序名:stob ;功能:将小写字母修改为大写字母 ;入口参数:al存放输入的字符 ;出口参数:al存放修改后的字符 stob proc near cmp al,61h jb next cmp al,7ah

汇编实验四 子程序设计

福建农林大学计算机与信息学院实验报告 系:计算机专业:网工年级:10 姓名:学号:20 实验室号__田513 计算机号 实验时间:指导教师签字:刘庆连成绩: 实验四子程序设计 1.实验目的 (1)学习子程序的编写,主子程序的调用; (2)不同模块间程序的调用和调试。 2.实验内容 1)数据段中的3个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,对CALL语句和RET语句观察SP,IP的变化,并用D命令查看栈顶的内容。 DATA SEGMENT MAG DB ‘ABC’ DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DA TA START: MOV AX, DA TA MOV DS, AX MOV SI, 0 MOV CX, 3 LL: MOV DL, MAG[SI] CALL MADD INC SI LOOP LL MOV AH, 4CH INT 21H MADD PROC MOV AH, 02H INT 21H RET

MADD ENDP CODE ENDS END START 2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。 具体步骤如下: MASM S31.ASM(分别汇编) MASM S32.ASM LINK S31 S32 (将两个文件连接成为一个文件名为S31) S31.EXE (运行) 3)编程:利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。(也可以将找到的不相等字符逐个显示,用INT 21H的02功能调用) 4)编程:子程序搜索指定字符缓冲区中是否有N,如果有用Y替代。调用子程序将BUF1,BUF2,BUF3中的N全部用Y替代。 附源程序: NAME S31.ASM 不同模块间的段间调用。从键盘输入2位非压缩BCD数,存入AX寄存器中。为了将其转换为二进制数,编写一个子程序TRAN。显示子程序DISP完成将16进制数转换为对应的ASCII码并显示该字符,显示子程序在另一模块S32中。输入数据为00时结束。 5)编一个子程序:输入一个字符,显示出来。 6)编一个子程序:输入一个字符串,显示出来。 4.算法描述及实验步骤 第一题 (1) 编写源程序,用记事本输入程序,并存储为源程序 (2)对源程序进行汇编、连接 (3)在debug提示符下输入g ,运行程序 (4)运行t命令,单步执行程序 (5)用d命令查看栈顶的内容 第二题 (1) 编写两段源程序,用记事本输入程序,并存储为源程序,分别为s31和s32 (2)分别对源程序进行汇编

实验1 汇编程序设计

实验一、汇编语言程序设计 一、实验目的 1. 熟悉Keil C51集成开发环境的使用方法。 2. 掌握数据传送指令的用法。 3. 掌握算术运算指令的用法 4. 掌握汇编语言程序设计方法 二、实验设备(仪器) PC微机一台 Keil C51集成开发环境一套 三、实验内容 1.按照Keil C51集成开发环境的要求,建立程序,然后进行编译。 2.将编译好的程序进行软件模拟仿真运行。 3. 数据传送,算术运算指令。 4. 逻辑操作、位操作和控制转移指令。 5.顺序程序设计 6.分支程序设计 7.循环程序设计 四、实验步骤 1.打开计算机电源,在桌面上双击“Keil uVision”图标,打开Keil C51集成开 发环境。 2.选择“Project”-“New Project…”建立新的工程文件(注意工程文件放置的文 件夹),输入文件名,选择“保存”。 3.在接下来的窗口中选择单片机芯片类型,暂时选择“Philips”下的“80C51FA”, 然后在接下来的窗口中,选择“否”,暂时不要加载芯片基本参数。 4.选择“File”-“New”或者点击新文件快捷图标,会打开一个文本编辑器窗口。 输入下列数据传送的程序,然后选择“File”-“Save…”,注意保存的时候给文件 起名字以后,加个文件名后缀,Keil C支持汇编语言及一种C语言编程,它是 依靠文件名后缀来判断文件是汇编语言还是C语言格式的,如果是汇编语言, 后缀为“.a”,C语言格式的,后缀为“.c”。我们选择保存为汇编语言格式,比 如保存为“Mcu1-1.a”。注意此时程序中的一些代码和寄存器将会自动蓝色显示,方便观察。 5.选择“Project”-“Targets,Groups,Files…”,选择“Groups/Add Files”标签, 首先点击下边窗口中的“Source Group 1”,然后选择下边的“Add Files to Group…”,在接下来的窗口中,首先选择你需要加入的文件的后缀名(默认是.c,我们选择“Asm Source file,即后缀为.a”),然后选择对应的文件,选择“Add”, 然后选择“Close”,最后选择“确定”,完成文件的添加工作。 6.然后选择“Project”-“Build target”或者直接按下F7,对文件进行编译。如果

汇编实验1-分支程序设计-实验报告

昆明理工大学信息工程与自动化学院学生实验报告 ( 2011 — 2012 学年第 1 学期) 课程名称:汇编与微机接口开课实验室:信自楼机房445 2011年09月27日年级、专业、班学号姓名成绩 实验项目名称分支程序设计指导教师 教师评语该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强□ B.中等□ C.差□ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 实验报告是否规范: A.规范□ B.基本规范□ C.不规范□ 实验过程是否详细记录: A.详细□ B.一般□ C.没有□ 教师签名: 年月日 一、实验目的 1)熟悉汇编语言程序设计的开发环境、格式以及汇编过程; 2)Debug的主要命令(结合教材第四章的例子),熟练掌握Debug命令的U命令、D命令、R命令、G命令、T命令、Q命令等; 3)掌握分支程序的设计方法; 二、所用仪器、材料(设备名称、型号、规格等) 计算机一台,MASM 5.0软件。 三、实验内容 1)输入并汇编折半查找程序; 2)观察并记录运行结果。

四、实验方法、步骤(或:程序代码或操作过程) 程序代码: STACKSG SEGMENT STACK 'S' DW 64 DUP('ST') STACKSG ENDS DATA SEGMENT BUF DB 30H,31H,32H,33H,34H,35H,36H, 37H,38H,39H,41H,42H,43H,44H,45H;有序表COUNT EQU $-BUF ;表项数 CHAR DB ? ;要查找的数 MARK DW 0 ;查找次数 PROMPT DB 'NO FOUND$' ;没找到提示信息 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSG MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,1 ;输入要查找数的字符 INT 21H MOV CHAR,AL ;保存要找的数 LEA SI,BUF ;表起始地址,初始 ;化区间下限(左) MOV CX,COUNT

汇编语言程序的设计实验篇(emu8086)

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和存单元的容。 1.1.1创建程序 https://www.sodocs.net/doc/ca6152604.html, TEMPLATE程序 本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。 在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。 输入全部指令后,单击按钮,保存相应的程序段。 2.EXE TEMPLATE程序 本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。 在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

汇编语言程序设计实验报告

实验报告实验名称汇编语言程序设计 | | 专业班级:信息安全 学号: 姓名:

实验一汇编语言上机过程和Debug常用调试命令 一.实验目的: 学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。 二.实验题目: 熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在调试过程中,学习及掌握debug程序的各种操作命令。 三.问题描述: 试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。 四.方法说明: a)使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。 b)用汇编程序masm(或asm)对源文件汇编产生目标文件obj 如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。 c)用连接程序link 产生执行文件EXE. d)执行程序,可直接从DOS执行程序。 e)使用debug程序调试程序的方法。 五.实验步骤: 1.调用字处理程序EDIT 建立以sample.asm文件 datarea segment string1 db‘move the cursor backward.’ string2 db‘move the cursor backward.’ mess1 db ‘Match..’,13,10,’$’ mess2 db ‘No match!..’,13,10,’$’ datarea ends prognam segment main proc far assume cs:prognam,ds:datarea,es:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax lea si,string1 lea di,string2 cld mov cx,25

汇编实验四--子程序设计

福建农林大学东方学院信息工程类实验报告 系:计算机系专业:电子信息工程年级: 10 姓名:廖少冰学号: 1050302103 实验课程:汇编语言 实验室号:_______ 实验设备号:实验时间: 指导教师签字:成绩: 实验四子程序设计 1.实验目的和要求 1、学习子程序的编写,主子程序的调用 2、不同模块间程序的调用和调试 2.实验用的软硬件环境 实验的硬件环境是: IBM—PC机及其兼容机 实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:https://www.sodocs.net/doc/ca6152604.html,;文本编程程序:EDIT.EXE、 WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。 3.实验内容及实验数据记录 1、数据段中的3个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,观察IP的变化 DATA SEGMENT MAG DB ‘ABC’ DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV SI, 0 MOV CX, 3 LL: MOV DL, MAG[SI] CALL MADD INC SI

LOOP LL MOV AH, 4CH INT 21H MADD PROC MOV AH, 02H INT 21H RET MADD ENDP CODE ENDS END START 2、阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。 具体步骤如下: MASM S31.ASM(分别汇编) MASM S32.ASM LINK S31 S32 (将两个文件连接成为一个文件名为S31) S31.EXE (运行) 3、编程:利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。(也可以将找到的不相等字符逐个显示,用INT 21H的02功能调用) 4、编程:子程序搜索指定字符缓冲区中是否有n,如果有用y替代。调用子程序将BUF1,BUF2,BUF3中的n全部用y替代 4.操作方法及实验步骤 1-1)文本编辑程序保存V1.asm,编译并连接后debug调试V1.exe。跟踪如下

实验基础汇编语言程序设计

实验二基础汇编语言程序设计 实验目的: 1.学习和了解TEC-2000 十六位机监控命令的用法; 2.学习和了解TEC-2000 十六位机的指令系统; 3.学习简单的TEC-2000 十六位机汇编程序设计; 实验容: 1.使用监控程序的R 命令显示/修改寄存器容、D 命令显示存储器容、E 命令修改存储器容; 2.使用A 命令写一小段汇编程序,U 命令反汇编刚输入的程序,用G 命令连续运行该程序,用T 命令单步运行并观察程序单步执行情况; 实验要求 在使用该教学机之前,应先熟悉其的各个组成部分,及使用方法。 实验步骤 1.关闭电源,将大板上的COM1 口与PC 机的串口相连; 2.接通电源,在PC 机上运行PCEC.EXE 文件,设置所用PC 机的串口为“1”, 其它的设置一般不用改动,直接回车即可; 3.置控制开关为00101(连续、存读指令、组合逻辑、16 位、联机),开关拨向上方表示“1”,拨向下方表示“0”; 4.按一下“RESET ”按键,再按一下“START ”按键,主机上显示: TEC-2000 CRT MONITOR Version 2.0 April 2001 Computer Architectur Lab.,Tsinghua University Programmed by He Jia > 5.用R 命令查看寄存器容或修改寄存器的容 1)在命令行提示符状态下输入: R↙;显示寄存器的容 注:寄存器的容在运行程序或执行命令后会发生变化。 2)在命令行提示符状态下输入: R R0↙;修改寄存器R0 的容,被修改的寄存器与所赋值之间可以无空格,也可有一个或数个空格主机显示: 寄存器原值:_ 在该提示符下输入新的值0036

汇编语言程序设计实验1

汇编语言程序设计实验 <1> 1.寻址方式与基本指令实验 1.1.实验目的 (1)熟悉80×86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。(2)掌握汇编语言程序设计上机过程和汇编语言源程序结构,为后续学习打好基础。(3)熟悉Microsoft的DEBUG或Borland的Turbo Debugger调试工具的使用方法。 1.2.预习要求(实验前完成) (1)熟悉汇编语言程序设计上机步骤。 (2)熟悉调试工具的使用方法 (3)复习80×86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。(4)了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题除外),以便在实验时进行验证。 1.3.实验内容 (1)读懂下列源程序,使用EDIT或其他软件生成EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT或其他软件打开EX11.LST文件了解.LST文件包含的信息;使用DEBUG或其他调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 ①程序装入后,代码段寄存器CS的内容为H,代码段第一条可执行指令“MOV AX, DA TA”对应的机器代码为H,它是一个字节指令,注意观察执行该指令时IP值的变化情况,该指令源操作数DATA的寻址方式是,其值为。 ②执行完“MOV DS, AX”指令后,数据段寄存器的内容为H,源程序在数据段中定义的数据82H、68和88被装入的存储单元的物理地址分别为H、H 和H。 ③程序中第一条“MOV AL, [BX]”指令对应的机器码为H,它是一个字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为,该操作数所在存储单元的逻辑地址(DS):(BX)为,其物理地址为H;执行完该指令后(AL)= H,CF= ,OF=,ZF= ,SF= ,AF= ,PF= ;若两操作数为无符号数,计算结果是否正确?若两操作数为带符号数,计算结果是否正确?若计算结果正确,结果是正数还是负数? ④执行完第二条“ADD AL, [BX]”指令后(AL)= H,CF= ,OF=,ZF= ,SF= ,AF= ,PF= ;若两操作数为带符号数,计算结果是否正确?

汇编语言程序设计实验1

实验一 一、实验内容 1)X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能: ①计算表达式值(V–(X*Y+Z-720))/X; ②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。 二、源代码 DA TA SEGMENT X DW -1 Y DW 720 Z DW 0 V DW 1000 SUM1 DW ? SUM2 DW ? DA TA ENDS STACK SEGMENT STACK STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX,DATA MOV DS,AX MOV AX,X MOV BX,Y IMUL BX MOV BX,Z ADD AX,BX SUB AX,2D0H MOV BX,V SUB BX,AX MOV AX,BX CBW MOV BX,X IDIV BX MOV SUM1,AX MOV SUM2,DX MOV AX,4C00H INT 21H

CODE ENDS END TART 三、运行结果

实验二 一、实验要求 2) 有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。 二、源程序 DA TA SEGMENT BUF1 DW 9348H BUF2 DW 4 DUP(0),0AH,0DH,'$' BUF3 DW 2 DUP(0),'$' DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DA TA MOV DS,AX MOV AX,BUF1 ADD AX,0 JS NEXT MOV BUF2,AX MOV BUF3,AX JMP EEE NEXT:AND AX,7FFFH NOT AX

汇编语言程序设计实验报告

湖北师范学院物理与电子科学学院 汇编语言程序设计实验报告 实验名称:DSP实验 班级:1 姓名 学号:

实验一堆栈的使用方法 一、实验目的 掌握堆栈的使用方法。 二、实验设备 计算机、DSP 实验箱。 三、实验内容 编写程序,观察堆栈的使用情况。 四、实验步骤 1、用仿真器将计算机与DSP 实验箱连接好,并依次打开实验箱电源、仿真器电源,然后运行CCS 软件。 2、新建一个项目: 点击Project-New,将项目命名为example3,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS 软件不能识别以中文命名的文件夹。 3、新建一个源文件: 点击File-New-Source File 可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(example3),保存类型选择*.ASM(如果源文件是C 语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM 为保存类型),我们在这里将保存名字命名为example3.asm 。 4、在项目中添加源文件: 在新建了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击example3.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的example3.asm 文件添加到该项目中去。 5、编写源程序: 在工程管理器中双击example3.asm ,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容: .title "example3.asm" .mmregs size .set 100 stack .usect "STK",size ;堆栈的设置 .bss length,10H .def _c_int00;start .text _c_int00: B start; start: STM #0,SWWSR ;插入0 个等待状态 STM #stack+size,SP ;设置堆栈的指针 LD #-8531,A STM #size,AR1 MVMM SP,AR7 loop: STL A,*AR7-

《汇编语言程序设计》实验报告一

《汇编语言程序设计》实验报告(一) 年级:___ 班级:______ 学号:______ 姓名:______ 一、 实验题目 1. 编制一汇编源程序,求出下列公式中的Z 值,并放在RESULT 单元中。 28*)(x y x z -+= 2. 用查表的方法将1位十六进制数转换成相应的ASCII 码(并在屏幕上显示)。 3. 写一个完整的程序放在代码段 C_SEG 中,要求把数据段D_SEG 中的AUGEND 和附加段E_SEG 中的ADDEND 相加,并把结果存放在数据段D_SEG 中的SUM 中。其中AUGEND 、ADDEND 和SUM 均为双字长变量,AUGEND 赋初值为99251,ADDEND 赋初值为-15962 二、实验要求 1. 分别用远过程和DOS 中断4CH 的两种方式编制完整的汇编语言源程序; 2. 掌握汇编语言上机的完整过程:编辑、汇编、连接、运行、调试; 3. 使用DEBUG 察看并修改寄存器和存储器的内容; 4. 使用DEBUG 连续运行、单步运行。 三、程序设计说明 1.程序hbsy1_1 功能:根据公式2 8*)(x y x z -+= 计算z 的值,并将结果存储在result 单元中。 算法:1)在数据段中定义两个变量x 和y ,并将x 赋初值为6,y 赋初值为7 2)定义一个适宜大小的堆栈段 3)指令 mov dx,x 实现dx=x ;指令 add dx,y 实现 dx=x+y ; 指令shl dx,cl 实现dx=(x+y)*8(cl 的值为3);指令sub dx,x 实现dx=(x+y)*8-x ; 指令sar dx,1实现dx=((x+y)*8)/2;指令mov result,dx 将z 的值存储到result 单元中。 2.程序hbsy1_2 功能:将一位十六进制数转换成相应的ASCII 码,并在屏幕上显示出来。

汇编程序设计实验

汇编程序设计实验 实验二简单程序设计 实验目的:熟悉汇编程序设计的基本过程。 实验内容: 1、NUMB1 DB ? NUMB2 DW 20 DUP(?) NUMB3 DB ‘USB’ MOV AX,TYPE NUMB1 2、编写人机对话程序 WHAT IS YOUR NAME? 输入:My name is . DSEG SEGMENT DATA DB 0AH,0DH,'WHAT IS YOUR NAME?$' BUF DB 81 DB ? DB 80 DUP(0) DSEG ENDS STACK1 SEGMENT DB 200 DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG,SS:STACK1 START: MOV AX,DSEG MOV DS,AX LEA DX,DATA MOV AH,09H INT 21H LEA DX,BUF MOV AH,0AH INT 21H MOV AH,4CH INT 21H CODE ENDS END START

思考:汇编程序设计有那些步骤,应该注意什么? 实验三程序设计练习一 实验目的:1.掌握汇编语言程序的结构和各种结构程序设计的方法; 2.熟悉汇编语言程序设计全过程; 3.用汇编语言进行程序设计。 实验内容: EX1:将变量A=10011010B的数据以二进制形式在显示器上输出。 EX2:1+2+22+23+……+2n-1=255,求N值并显示出来。 EX3:已知在以BUF为首地地址的字节存储区中,存放着一个以‘$’作结束标志的字符串,编写程序,显示该字符串,并要求将小写字母以大写字母形式显示出来。(小写a为61H,大写A 为41H。) EX4:在以PROG为首址的字节存储区中存放着一段汇编源程序,最后以CTRL—Z(其ASCII码为1AH),统计“MOV”出现的次数,并将统计结果送入字变量NUM中。 EX5:已知m×n矩阵A的元素aij 按行序存放在以BUFA为首地址的字节存储区中,试编写程序,求每行元素之和Si,其中aij为8位二进制数。 EX1:将变量A=10011010B的数据以二进制形式在显示器上输出。 DATA SEGMENT A D B 10011010B B DB '(A)=$' C DB 'B',0DH,0AH,'$' DATA ENDS STACK1 SEGMENT DB 200 DUP(0) STACK1 ENDS

汇编语言程序设计实验报告

汇编语言程序设计报告 班级: 学号: 姓名:

目录 汇编语言程序设计报告 (1) 汇编语言程序设计实验报告 (4) 实验一 (4) 实验内容 (4) 实验目的 (4) 实验代码 (4) 实验代码整体思路 (5) 1.检测所编程序的正确性 (5) 实验二 (7) 1.实验内容 (7) 结果测试: (11) Debug: (11) 实验三 (13) 实验要求: (13) 实验代码: (13) 实验代码思路: (15) 检测结果,验证正确性 (15) 结论 (17) 实验四 (17) 实验内容 (17) 流程图 (18) 实验代码: (18) Windbg (21) 实验结果测试: (23) 输入数据进行测试 (24) 实验五 (24) 实验内容:多模块程序设计及多语言混合编程。 (24) 要求: (24) 实验代码: (24)

实验代码分析说明: (26) 实验数据检测:判断是否成功完成实验任务 (27) 实验心得 (28)

汇编语言程序设计实验报告 实验一 实验内容:熟悉DOS编程环境:编写一个DOS环境的汇编语言程序,要求从键盘输入一串字符,去除连续重复的字符后再显示,如:输入一串为“aaawwweerrty”的字符串,输出结果应为‘awerty’ 实验目的:通过上机实践加深对16位环境下编程的了解 学会使用debuge调试程序 实验代码: ASSUME CS:CODE, DS:DATA DATA SEGMENT BUFFER DB 60, ?, 60 DUP(?) PRINT DB 'TO INPUT: ' CRLF DB 0DH, 0AH, '$' DATA ENDS CODE SEGMENT MAIN: MOV AX, DATA MOV DS, AX MOV AH, 9 LEA DX, PRINT INT 21H MOV AH, 0AH LEA DX, BUFFER INT 21H MOV AH, 9 LEA DX, CRLF INT 21H LEA SI, BUFFER + 1

相关主题