文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言编程实验报告

汇编语言编程实验报告

汇编语言编程实验报告
汇编语言编程实验报告

汇编语言编程实验报告

学号:

姓名:

成绩:

目录

一、实验一: ................................................... 错误!未定义书签。

二、实验二: (4)

三、实验三: (8)

四、实验四: (10)

五、实验五: ................................................... 错误!未定义书签。

六、实验六: (19)

七、汇编实验总结 (23)

实验一

一.实验题目

【汇编语言补充作业T20】编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。

二.程序流程及思路

实现字符串输入,需要分成三个步骤:

1、在数据段中定义一个缓存区为存放字符串做准备;

2、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;

3、在输入的字符串尾加上‘$’字符,以作为输出结束条件。

实现字符串输出,则需要注意的问题是:

1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度

和字符串实际字符数;

2、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。

三.源程序清单

DATA SEGMENT

N EQU 50

MAXLEN DB N ;缓冲区字符的最大长度

ACTLEN DB ? ;实际字符个数

STRING DB N DUP(?) ;字符空间

CR DB 0AH,0DH,'$'

DATA ENDS

CODE SEGMENT

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

START: MOV AX,DATA

MOV DS,AX

LEA DX,MAXLEN

MOV AH,0AH

INT 21H ;字符串输入

MOV AH,09H

LEA DX,CR

INT 21H ;回车换行

MOV BL,MAXLEN+1 ;取实际的字符长度

MOV BH,0

LEA SI,MAXLEN+2 ;取字符开始的首地址

MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$

MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

四.结果拷屏

实验二

一. 实验题目

【汇编语言补充作业T23】假设CX:BX中存放了4为非压缩的BCD码表示的十进制数4386,请编写完整程序将这个数转化成2进制数并存放到DI寄存器中。

二. 程序流程及思路

首先,要解决以上问题需分三个步骤进行:

1、将CX:BX中的非压缩BCD码调整成压缩BCD码。这有两种方法:

a、利用非压缩BCD码调整指令AAD,达到以上目的;

b、利用移位指令,将两个非压缩BCD码进行整合,达到以上目的; (注:以下程序采用b方法)

2、将调整后的压缩BCD码转化为十进制数。调整后b3b2=43,b1b0=86。转化方法为b3b2*100+b1b0 → DI。计算结果送入DI寄存器中。

由于100=64+32+4,因此考虑用移位指令进行BCD码的乘法运算。

3、利用移位指令编写一段代码进行结果输出,以便于在屏幕上直接进行核对检验。

三.源程序清单

DATA SEGMENT

DATA ENDS

CODE SEGMENT

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

start: mov ch,04

mov cl,03

mov bh,08

mov bl,06 ;

mov al,ch

mov ah,0

shl ax,1 ;ch位乘10(10=8+2)

mov si,ax

shl ax,1

shl ax,1

add ax,si

;

mov ch,0

add ax,cx

mov dx,ax ;dx=43

shl dx,1

shl dx,1

mov ax,dx

shl dx,1

shl dx,1

shl dx,1

add ax,dx

shl dx,1 ;

add dx,ax ;dx乘以100(100=64+32+4)

mov al,bh

mov ah,0

mov si,0

shl ax,1 ;bh位乘10

mov si,ax

shl ax,1

shl ax,1

add ax,si ;

mov bh,0

add ax,bx

add dx,ax

mov di,dx

show: mov cl,4 ;该段进行结果输出检验

mov bx,dx

shr bh,cl

mov dl,bh

add dl,30h

mov ah,2

int 21h ;1位

mov bh,dh

and bh,0Fh

mov dl,bh

add dl,30h

mov ah,2

int 21h ;2位

mov dh,bl

shr dh,cl

mov dl,dh

add dl,30h

mov ah,2

int 21h ;3位

mov dh,bl

and dh,0Fh

mov dl,dh

add dl,30h

mov ah,2

int 21h ;4位

mov ah,4ch

int 21h

code ends

end start

五.结果拷屏

输出结果为1122[十六进制],将题目中4386换成4096,输出如下,为1000[十六进制]:

实验三

一.实验题目

【汇编语言补充作业T22】已知有以下数据段定义:

NUM DW 3570

STRING DB 5 DUP(20H),’$’;20H为空格的ASCII码

请编写完整程序,在屏幕上以十进制的形式将NUM这个数打印出来,可以借助STRING这个字符串。(NUM这个数可以定义为一个任意字型数)

二.程序流程及思路

考虑到NUM在寄存器中以十六进制数的形式进行存放,转化成十进制数可能最大值为65535,则输出刚好输出的十进制数位数为5位。

因此,需要除以10000d,1000d,100d,10d,1d来分别取出该数各位数值,并在屏幕上连续打印。其过程为:

1、将NUM先存入寄存器SI中,除数为10000d;

2、除法完成后,商直接输出,余数保留并且存入SI中;

3、依次将除数换成1000d,100d,10d,1d,重复2操作,直到程序结束。

另外,程序打印每一位所执行的动作需要重复五次,因此将该过程写成一个子程序(chufa)进行调用,可以简化代码,使得程序可读性更强,程序健壮性更好。

三.源程序清单

DATA SEGMENT

NUM DW 3570

DATA ENDS

CODE SEGMENT

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

start: MOV AX,DATA

MOV DS,AX

mov si,num

mov cx,10000d

call chufa

mov cx,1000d

call chufa

mov cx,100d

call chufa

mov cx,10d

call chufa

mov cx,1d

call chufa

mov ah,4Ch

int 21h

chufa: mov ax,si ;si 存储的是要输出的十进制数据

mov dx,0

div cx

mov si,dx ;余数赋给si 寄存器,为下一步出发做准备

mov dl,al

add dl,30h

mov ah,2

int 21h ;除法的商直接输出

ret

code ends

end start

四.结果拷屏

以上为NUM=3570d时程序输出结果为03570,若将NUM改为1122H,则输出如下,结果为04386:

实验四

一.实验题目

【汇编语言补充作业T13】请编写完整程序在一个升序字节数组中查找数N,找到后将此数从数组中删除,并使得CF=0;没找到返回CF=1。数组的首地址和末地址为A_HEAD和A_END。

二.程序流程及思路

删除升序数组中的一个数N的关键步骤是将这个数搜索出来。若搜索到,则进行删除,然后对整个数组进行调整;若未搜索到,则无操作动作。其中进行搜索的方法为逐个比较。

程序流程图如下:

Y

三.源程序清单

DATA SEGMENT

ARRAY DB 1,2,3,4,5,6,7,8,9,0

LENG EQU $-ARRAY

ARRAY_END DW ?

ARRAY_HEAD DW ?

NUM DB 5

DATA ENDS

STACK SEGMENT STACK

STACK ENDS

CODE SEGMENT

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

START: MOV AX,DATA

MOV DS,AX

MOV AL,LENG

CBW

MOV BX,OFFSET ARRAY

MOV ARRAY_HEAD,BX

ADD AX,BX

MOV DI,AX

DEC DI

MOV ARRAY_END,DI

MOV AX,0

MOV AL,NUM

L1: MOV DL,0

MOV DL,[BX]

CMP DL,AL ;当前数与NUM进行比较 JNE L2 ;不相等跳转至L2

JMP DELETE ;相等跳转至DELETE

L2: INC BX

CMP BX,ARRAY_END

JBE L1 ;指针+1,并循环

STC

JMP EXIT

DELETE:MOV DI,ARRAY_END

SUB DI,BX

MOV CX,DI

DEL: MOV DX,[BX+1] ;将BX之后的数依次前移一位

MOV [BX],DX

INC BX

LOOP DEL

DEC ARRAY_END ;删除后ARRAY_END前移

CLC

JMP EXIT

EXIT: MOV CX,0

MOV CX,ARRAY_END

MOV AX,OFFSET ARRAY

SUB CX,AX

INC CX

MOV BX,0

SHOW: MOV DL,[ARRAY+BX] ;将删除后数组元素打印以检验 ADD DL,30H

MOV AH,2

INT 21H

INC BX

LOOP SHOW

MOV AH,4CH

INT 21H

CODE ENDS

END START

四.结果拷屏

以上输出为在1、2、3、4、5、6、7、8、9、0数组中删去N=5的结果 调用debug-t命令可以查看CF标志位状态:

可见,CF位为0,若当N=10,在数组里未找到目标数,则结果为:

可见数组元素不变,且CF=1

实验五

一.实验题目

【汇编语言补充作业T14】请编写完整程序从键盘读取字符,如果是十进制的0—9,则在屏幕上输出该数的八位二进制码,并将数字依次存放到BUF开头的数组中;如果读取的字符是‘Q’或者‘q’,则程序退出;其他情况在屏幕上打印“You must input 0-9 or ‘q’ or ‘Q’”。

(如输入的字符是‘9’,则输出00001001)

提示:输出一个数的2进制形式应该从最高位开始输出,可以将此段程序定义为一个过程。

二.程序流程及思路

总体流程:

1、利用DOS系统功能调用21H 的01号子功能读取键盘输入的一个字符x,换行,然后将x与0、9的ASCII码进行比较,若在0—9范围内,则跳至2;不在该范围内跳至3;

2、打印该数的二进制形式,将该数存入数组BUF中,换行,跳至1;

3、将x与Q、q的ASCII码进行比较,若相等,则打印数组内容,退出程序;否则,跳至4;

4、打印字符串“You must input 0-9 or ‘q’ or ‘Q’”,换行,跳至1;

由以上过程看出,程序的唯一退出条件为输入字符‘q’或‘Q’。

流程图如下图:

二进制形式打印定义的过程如下:

初始化:除数A=128(2的7次方),被除数为B

1、B除以A,打印商,B←余数,A←A/2。若A=1,跳至2;否则,重复1;

2、退出打印。

另外,程序定义变量 B_END作为数组的尾指针,当符合输出规则,将输入的数存放入数组BUF中,尾指针后移一位。这样定义便于在输出数组的时候定制结束条件。

程序中定义数组的大小20个字节。

三.源程序清单

DATA SEGMENT

MESSAGE DB 'You must input 0-9,or"q"or"Q"','$' CR DB 0AH,'$' BUF DB 20 DUP(0) B_END DW ? NUM DB 2 DATA ENDS

STACK SEGMENT STACK STACK ENDS

Y

CODE SEGMENT

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

START: MOV AX,DATA

MOV DS,AX

MOV AX,OFFSET BUF ;空数组时尾指针指向数组起始地址 MOV B_END,AX

DEC B_END

MOV AX,0

L: MOV AH,1 ;输入字符

INT 21H

CMP AL,30H

JB ERROR ;小于30H,跳转至ERROR

CMP AL,39H

JBE NEXT ;>=30H且<=39H,跳转至NEXT

CMP AL,'Q'

JE EXIT

CMP AL,'q'

JE EXIT ;等于Q或q,跳转至EXIT

JMP ERROR ;其他情况跳转至ERROR

NEXT:

STORE: SUB AL,30H

MOV AH,0

INC B_END

MOV DI,B_END

MOV [DI],AL ;将输入的0-9的数存入数组BUF

MOV SI,128

SHOW1: MOV DX,0 ;将输入的数以八位二进制码形式打印 MOV BX,SI

DIV BX

MOV CX,DX

MOV DX,AX

ADD DX,30H

MOV AH,2

INT 21H

MOV AX,0

MOV AX,SI

DIV NUM

MOV SI,AX

MOV AX,CX

CMP SI,1

JA SHOW1 ;循环,由高位至低位依次输出

MOV DX,AX

ADD DX,30H

MOV AH,2

INT 21H ;输出末位

MOV AH,9

LEA DX,CR

INT 21H ;换行

JMP L

ERROR: MOV AH,9 ;非规定字符情况处理

LEA DX,MESSAGE

INT 21H

MOV AH,9

LEA DX,CR

INT 21H

JMP L

EXIT:

MOV AH,9 ;接收到Q或q后程序响应

LEA DX,CR

INT 21H

MOV CX,B_END

MOV BX,OFFSET BUF

SUB CX,BX

INC CX

SHOW2: MOV DX,[BX] ;将存入数组的元素依次打印以检验 ADD DX,30H

MOV AH,2

INT 21H

INC BX

LOOP SHOW2

MOV AH,4CH

INT 21H

CODE ENDS

END START

四.结果拷屏

汇编语言实验2

计算机工程系实验报告 课程名称:汇编语言 实验项目名称:用机器指令和汇编语言指令编程 班级:15级计科4班姓名:梁红梅学号:15091413 一、实验目的: 1.学习Debug中D命令的使用方法,掌握查看指定内存单元的内容的指令,其中本实验中 主要掌握“d段地址:偏移地址”的格式; 2.了解Debug 中D命令程序的执行者:CPU,了解D命令的执行过程; 3.掌握CPU在访问内存单元时的主要过程; 4.学习怎样利用在Debug中cs、ds、ss、es这4个段寄存器,简化debug命令格式。 二、实验要求: 使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。Mov ax,ffff Mov ds,ax Mov ax,2200 Mov ss,ax Mov sp,0100 Mov ax,[0] ;ax= Add ax,[2] ;ax= Mov bx,[4] ;bx= Add bx,[6] ;bx= Push ax ;sp= 修改的内存单元的地址是内容为 Push bx ;sp= 修改的内存单元的地址是内容为 Pop ax ;sp= ;ax= Pop bx ;sp= ;ax= Push [4] ;sp= 修改的内存单元的地址是内容为 Push [6] ;sp= 修改的内存单元的地址是内容为

三、实验数据记录: 1.进入Debug后使用-a命令将程序写入内存 2.通过使用-t命令将写入内存的程序逐一执行,直到命令执行完毕

三、实验结果及分析: 1.mov ax,[0] 执行完成后 ax=C0EA; 2.add ax,[2]执行完成后ax=C0FC; 3.mov bx,[4] 执行完成后 bx=30F0; 4.add bx,[6]执行完成后 bx=6021; 5.push ax 执行完成后 sp= 00FE 修改的内存单元的地址是 2200:00FE 内容为C0FC 6.push bx 执行完成后 sp= 00FC 修改的内存单元的地址是 2200:00FC 内容为6021

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 2011年12月14日

目录 实验1 利用DEBUG调试汇编语言程序段 (3) 实验2 初级程序的编写与调试实验(一) (11) 实验3 初级程序的编写与调试实验(二) (20) 实验4 汇编语言程序上机过程 (28) 实验5 分支程序实验 (33) 实验6 循环程序实验 (40) 实验7 子程序实验 (45)

实验1 利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序 3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100;显示DS段, 0100开始的128个节内容

说明:指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容. ② D SEGREG[段地址:偏移地址] ;显示SEGREG段中(缺省内默认为DS), [段地址:偏移地址]开始的[L 长度] (缺省内默认为128)个字节内容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节内容 -D CS:200 ;显示CS段, 0200H开始的128个字节内容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 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 + 第1页

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

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

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

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

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

汇编实验报告2-1

《汇编语言程序设计》第二次上机2-1实验报告 院系:计算机科学与技术 专业:信息安全 班级:0903班 姓名: 学号: 时间:2011-6-6 地点:南一楼808

一、实验目的 (3) 二、题目与实验要求 (3) 三、寄存器分配和变量定义说明: (3) 四、流程图 (5) 五、源程序及注释 (7) 六、实验步骤 (13) 七、实验记录 (13) 八、体会 (16)

一、实验目的 1、加深对一些常用的汇编指令的理解; 2、加深对常用DOS功能调用指令的理解; 3、进一步熟悉TD的使用。 二、题目与实验要求 1、《80X86汇编语言程序设计》教材中 P95的 3.7 题。 要求:(1)将该题改成一完整的程序(可以省略实验报告中的程序框图)。 (2)请事先指出依次执行每条程序指令后(AX)的内容。 (3)请事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值。 (4)记录上机执行后与(2)、(3) 中对应的内容。 2、《80X86汇编语言程序设计》教材中 P94的 3.3 题。 要求:(1)将该题改成一完整的程序,其中数据段的定义为习题3.1中的数据段(可以省略实验报告中的程序框图)。 (2)请事先画出数据段中数据的存储形式。 (3)请事先指出依次执行每条程序指令后相应寄存器中的内容。 (4)请事先给出各调指令在汇编后的形式。 (5)比较上机执行后,看到的各项内容是否与(2)、(3) ,(4)内容一致。 不一致的应分析错误原因。 3、《80X86汇编语言程序设计》教材中 P96的 3.11 题。 要求:(1)请事先指出程序运行结束后,显示器显示的内容。 (2)若将NUM的定义改成如下形式: NUM DB 35 显示的结果是什么? (3)若将NUM的定义改成如下形式: NUM DB 59 显示的结果是什么? (4)指出程序运行后看到的结果,若不一致,分析产生错误的原因。 4. 从键盘输入两串字符分别存入BUF1和BUF2区,比较两串内容是否相等,相等显示“MATCH !”, 不相等显示“NO MATCH !”。 要求:(1) 使用10号功能调用输入字符串; (2) 使用9号功能调用输出提示信息; 提示:先比较长度是否相等。 5 选做题 输入一个无符号的数字串,然后以16进制形式显示出串的值。 例如: INPUT A NUMBER : 59 RESULT : 3BH 其中下划线上的内容(59)为程序运行时输入的串。 三、寄存器分配和变量定义说明:

汇编语言综合实验报告

XXXX大学XX学院 实验报告 课程名称:汇编语言 学号: 姓名: 系: 专业: 年级: 指导教师: 职称: 20xx~20xx学年第一学期

实验项目列表 序号实验项目名称成绩指导教师 1 实验一汇编程序的汇编及运行 2 实验二顺序程序设计 3 实验三分支循环程序设计 4 实验四 DOS功能调用 5 实验五子程序设计 总平均

福建农林大学金山学院实验报告 系:专业:年级: 姓名:学号:实验课程:汇编语言 实验室号:__ __ 实验设备号:实验时间: 90分钟 指导教师签字:成绩: 实验一汇编程序的汇编及运行 1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程 (2)生成LST文件,查看LST文件 (3)生成OBJ文件,修改语法错误 (4)生成EXE文件 (5)执行 2.实验环境 IBM—PC机及其兼容机 实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:https://www.wendangku.net/doc/412541729.html,;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。 3.实验内容及实验数据记录 (1)将数据段输入,取名1.txt,保存在MASM文件夹下。生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少? DA TA SEGMENT ORG 20H NUM1=8 NUM2=NUM1+10H DA1 DB ‘IBM PC’ DA2 DB 0AH, 0DH COUNT EQU $-DA1

大学课程汇编语言的实验报告

实验报告 实验课程: 学生姓名: 学号: 专业班级:电气信息类III班 2011年12月20日

目录 (1)汇编语言程序上机过程 (2) (2)字符串处理程序实验 (6) (3)子程序实验 (13) (4)中断程序实验 (21) (5)C++调用汇编子程序 (25)

南昌大学实验报告 ---(1)汇编语言程序上机过程学生姓名:学号:专业班级: 实验类型:□验证■综合□设计□创新实验日期:2011.11.12/13实验成绩:一、实验目的 熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。 二、实验内容 1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用; 2.伪指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP; 3.利用的INT21H的1号功能实现键盘输入的方法; 三、实验环境 PC微机 DOS操作系统或Windows操作系统 MASM.EXE,LINK.EXE,https://www.wendangku.net/doc/412541729.html,或宏汇编集成环境 四、实验要求 1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容; 2.了解利用的INT21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法; 3.阅读下面程序段。 五、主要实验步骤 程序: data segment message db'This is a sample program of keyboard and disply' db0dh,0ah,'Please strike the key!',0dh,0ah,'$' data ends stack segment para stack'stack' db50dup(?) stack ends code segment assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax mov dx,offset message mov ah,9 int21h again:mov ah,1

汇编语言综合实验报告

综合性设计性实验报告 班级:计算机科学与技术专2014 级 4 班实验项目名称:循环显示1 0 个数字符号 实验项目性质:综合性 实验所属课程:计算机组成原理与汇编语言 实验室(中心):实验室(4 0 7 ) 指导教师: 实验完成时间: 2016 年 5 月 27

一、实验目的 (1)掌握子程序的定义和调用方法。 (2)掌握子程序的编写方法及参数传递的方法。 二、实验内容及要求 本实验内容主要是编写一个显示过程汇编程序,使得在屏幕上依次显示10 个数字符号,每一行13 个字符,然后循环进行显示。实验要求是在代码段中编写这个过程,并要求用主程序调用该过程。 三、实验设备及软件 实验室(407)电脑一台以及编译器DEBUG MASM LINK软件。 四、设计方案 ㈠题目(老师给定或学生自定) 循环显示10个字符 ㈡设计的主要思路 首先,先定义一个数据段和代码段。数据段内定义一个名称为prl大小为一个字节的字符串,即本人学号。代码段内首先借助段寻址伪指令ASSUME规定好代码段和数据段分别在段寄存器CS、DS。然后start内将数据段段地址放入DS中。接下来定义一个子程序dgdsp,其实现的功能主要是先将bl(字符数目控制)清零,dl(字符范围0-9)赋值为字符0的ascll码。然后定义一个lp循环,循环内调用DOS2号功能显示字符,并bl、dl自增,接着比较dl与字符9的ascll码值的大小,若大于就将dl重置为字符0的ascll码。若小于则跳转到next循环,next循环中主要比较bl与13的大小,若小于则跳转到lp,若大于就进入bbb子程序。bbb子程序主要是先保护DX将其压栈,然后使用DOS9号功能显示prl字符串,最后将DX出栈。然后进入next循环将DX压栈,分别使用DOS0a、02号功能将dl输入显示,最后将DX出栈。分别将bl、al清零,最后跳转到lp子程序继续循环执行。 流程图如下:

汇编语言实验报告——累加

《汇编语言》实验报告 ——累加器制作 2014级计算机科学与工程学院 学号: 姓名 一、实验要求: 1.显示 INPUT N :,提示用户输入数字字串 2.检测输入字串的合法性,非法给出提示 3.将输入数字字串转化为数值,存入变量n 4.累加1~n ,存入变量sum 5.以十进制显示sum 二、流程图: 开始 输入 判断是否为回车 判断是否为数字 是 转化为数值,将堆栈中 的高位数字乘10然后与低位数字相加,放入堆 栈 否 显示“error ” 结束 否 是 判断cx=0 否 将CX加到A X中 是 得出sum的值 将结果除以10并将余数存入堆栈,累计位数cx,直至商为0 将堆栈中的数字依次输出显示,直至cx=0

三、源代码: DATAS SEGMENT str1 db "Input N:","$" str2 db "sum=","$" str3 db 0ah,"error","$" n dw 0 sum dw 0 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA dx,str1;输出提示符 mov ah,9 int 21h input: mov ah,01;输入数字 int 21h cmp al,0dh;判断是否为回车 jz step1 cmp al,"0";判断字符合法性 jb error cmp al,"9" ja error sub al,"0";转化为ASCII码 mov ah,0;此段将高位乘10 push ax mov ax,n shl ax,1 push ax mov cl,2 shl ax,cl

汇编语言(第2版)王爽著 课后实验报告详解

汇编语言实验报告 : 班级学号 学生姓名 提交日期 成 绩

实验1-1如下: 用E命令将指令写入内存:

用A命令将指令写入内存: 实验1-2代码如下: 用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。如图:

实验1-3: 用D 命令输入内存fff0h~fffffh,则可看到:

生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有: 在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。 实验1-4代码如下:

内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节 实验2-1:(按实验结果填空) Mov ax,ffff Mov ds,ax Mov ax,2200 Mov ss,ax Mov sp,0100 Mov ax,[0] ;ax=5BEA Add ax,[2] ;ax=5CCA Mov bx,[4] ;bx=30F0 Add bx,[6] ;bx=6026 Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是6026 Pop ax ;sp=00FE; ax=6026. Pop bx ;sp=0100; bx=.5CCA Push [4] ;sp=00FE; 修改的内存单元的地址是2200:00FE内容是30F0 Push [6] ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是2F36 实验截图如下:

汇编程序调试实验报告

微机原理与接口技术 作 业 班级: 目录 一、........................................................... 实验目的:2 二、............................................................. 实验环境2 三、............................................................. 实验过程3 (一)................................................. 基础知识储备3

(二)............................................. 汇编语言程序设计3

(三)汇编程序调试 (3) 四、............................................................. 调试实例4 (一)....................................................... 实例一4 (二)....................................................... 实例二6 (三)....................................................... 实例三9 (四)....................................................... 实例四12五、............................................................. 实验总结15 (一)..................................................... 实验收获15 (二)..................................................... 实验感悟16 一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标 代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MAS汇编语言及其程序设计方法。 、实验环境 EDIT编辑器、MASME编程序、LINK连接程序、TD调试程序

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

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 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

汇编语言实验报告

汇编语言程序设计实验报告 学院:计算机科学与技术 专业:计算机科学与技术 指导教师: ** 班级: ** 学号: ** 姓名:**

实验一集成环境及调试工具 一、实验题目 认识Tddebug集成操作软件 二、分析设计思想,绘制实验原理图、流程图 (一)、汇编语言程序的开发过程如图1.1所示,这个过程主要有编辑、编译、链接几个步骤构成。 图1.1 汇编语言程序开发过程 1、源程序的编辑 E: > EDIT TEST.ASM 编辑过程就是将源程序输入内存,生成一个扩展名为ASM的文本文件并存入硬盘。2、源程序的编译 E:>TASM TEST.ASM 编译也称为汇编,就是利用汇编器(如TASM或MASM)对源程序进行编译,生成扩展名为OBJ的目标文件。在编译过程中,检查语法错误,若有错,则不生成目标代码文件,并给出错误信息。根据错误信息应返回到编辑状态,修改源程序。 3、目标程序的链接 E:> TLINK TEST.OBJ 链接过程是利用链接程序(如TLINK或LINK)将用户目标程序和库文件链接、定位,生成扩展名为EXE的可执行文件。链接时,如果链接文件找不到所需要的链接信息,则发出错误信息,不生成可执行文件。 4、调试可执行程序 E:>TD TEST.EXE 如果生成的EXE文件运行后,并没有按照设计意图运行,就需要对程序进行调试,找出错误。再对源程序进行修改,即重复进行编辑、编译、链接、调试,直到生成完全正确的可执行文件为止。 (二)、Tddebug集成操作软件使用说明 1.该软件是集编辑(Edit.exe)、编译(Tasm.exe)、连接(Link.exe)和调试(TD.exe)

汇编实验报告(详细版).

计算机组成与汇编语言(实验报告) 内容: 实验一、六、七、八 院系专业:计算机学院计算机科学与技术 姓名:xxxxxxxxx 学号:2011004xxxxx 完成时间:2012年12月1日

计算机组成与汇编语言实验报告 姓名xxxx 学号2011004xxxxx 计分 专业软件工程班级xxxx 实验日期2012年 12 月 1日实验名称实验一数制转换 实验目的 ●熟悉各种进制数据之间的相互转换方法。 ●掌握二-十进制数据的相互转换程序设计。 实验内容 1.将编写好的程序1输入、编译、连接并运行。 程序1清单 #include #include #include void main() { int i,l,s0=0,s=0; char a[17]; while(l!=16) { printf("请输入一个16位的二进制数:\n"); gets(a); l=strlen(a); for(i=0;i<16;i++) { if(a[i]!='0'&&a[i]!='1') {

printf("输入的二进制数不正确!!"); break; } } } if(a[15]=='1') s++; for(i=1;i<16;i++) { if(a[15-i]=='1') s+=(1<

说明:如果不是16位二进制则会提示错误。 2.将编写好的程序2输入、编译、连接并运行。 程序2清单 #include #include void main() { int t0,t1,t2,t3,i,j; int a[16]; printf("请输入一个十进制数:"); scanf("%d",&t0); t1=t0; for(i=0;i<16;i++) { t2=t1/2; if(t2>1) a[i]=t1%2; else if(t1==1) { a[0]=1; for(i=1;i<16;i++) a[i]=0; } else if(t1==2) { a[i]=0; a[i+1]=1; for(j=i+2;j<16;j++)

汇编语言实验报告..

汇编语言课程设计 学院: 专业: 姓名: 学号:

汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。 目录 1 利用DEBUG调试汇编语言程序段……………………………………… 2 初级程序的编写与调试实验(一) ................................................................................. 3 初级程序的编写与调试实验(二)………………………………………... 4 汇编语言程序上机过程 .......................................................................................................... 5分支程序实验…………………………………………………………… 6 循环程序实验……………………………………………………………..

1 利用DEBUG调试汇编语言程序段 一.课程目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.课程内容 1.进入和退出DEBUG程序; 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100 2)E命令(修改指定内存) 例1:-E100 41 42 43 44 48 47 46 45 -D 100,L08 结果:08F1:0100 41 42 43 44 48 47 46 45 例2:-E 100: 08F1:0100 76 42 :42是操作员键入 此命令是将原100号内存内容76修改为42,用D命令可察看。 3)R命令(显示当前寄存器的内容) 4)T命令(设置陷井,单步执行) 5)A命令(将指令直接汇编成机器码输入到内存中。) 6)G命令等的使用(执行A命中输入的汇编指令) 3.用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。 三.课程要求 1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;四.环境 PC微机 DOS操作系统或Windows 操作系统 MASM.EXE,LINK.EXE,https://www.wendangku.net/doc/412541729.html,或宏汇编集成环境 五.方法步骤 1.在DOS提示符下,进入DEBUG程序; 2.在DOS目录下启动DEBUG; 3.详细记录每一步所用的命令,以及查看结果的方法和具体结果。 R, D, E 命令:

汇编语言实验报告 20112914

合肥工业大学计算机与信息学院 实验报告 课程:汇编语言程序设计专业班级:信息安全11-1 学号:20112914 姓名:王佳淼

实验一Debug程序的使用 一.实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二.实验内容 1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 三.实验过程和程序 1、启动DOS操作系统 2、运行https://www.wendangku.net/doc/412541729.html,程序(若当前盘为C) C:>DEBUG↙ – ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令) 3、用“A”命令编辑和汇编源程序 –A ↙ 186E:0100 MOV AX,[0200]↙ 186E:0103 MOV BX,[0202]↙ 186E:0107 ADD AX,[0204]↙ 186E:010B ADC BX,[0206]↙ 186E:010F MOV [0208],AX↙ 186E:0112 MOV [020A],BX↙ 186E:0116 ↙ 4、用“U”命令反汇编验证源程序 –U CS:0100↙ 186E:0100 A10002 MOV AX,[0200] 186E:0103 8B1E0202 MOV BX,[0202] 186E:0107 03060402 ADD AX,[0204] 186E:010B 131E0602 ADC BX,[0206] 186E:010F A30802 MOV [0208],AX 186E:0112 891E0A02 MOV [020A],BX 186E:0116 –

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

循环结构汇编语言程序设 计实验报告 实验四循环结构汇编语言程序设计 一、实验目的 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后,调试程序

汇编语言实验报告

合肥工业大学 计算机与信息学院 实验报告 课程:机器人技术 专业班级:计算机科学与技术09-3班学号:20092731 姓名:李锐

实验 2 Demeer5(kick 和dash) 1、试验目的: (1)了解Demeer5 的工作原理 (2)会对Demeer5 进行简单的修改 2、试验设备 硬件环境:PC 软件环境:Linux 3、试验内容 (1)Demeer5 的工作原理: Demeer5 函数是整个球队的核心,它最终返回一个可以执行的动作,底层的模块负责将此动作发送给Server,然后由Server 执行。可以说,Demeer5 就是我们想法的体现,是一支球队的大脑。在Demeer5 中有一系列的判断来决定每个周期的动作。下面对Demeer5 进行简要的分析。 Demeer5()是一个决策函数,在策略上使用的是下面这个简单的策略: 如果球可踢,则用最大力量踢球; 如果球不可踢且我是队友中最快到达球的队员,则去截球; 其他情况按战略点跑位。 我们现在只要看一下球可踢时的代码: else if( WM->isBallKickable()) // 如果球可踢 { //确定踢向的点 VecPosition posGoal( PITCH_LENGTH/2.0, (-1+2*(WM->getCurrentCycle()%2)) * 0.4 * SS->getGoalWidth() );

//调用踢球的动作 soc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal //将动作放入命令队列中 ACT->putCommandInQueue( soc ); //将脖子转向球 ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) ); //记录调试信息 Log.log( 100, "kick ball" ); } 这一小段函数决定了当球在球员智能体的可踢范围之内时应当做的动作,这里是一个简单的把球向前踢而不考虑任何其他情况的方法。该程序段的条理是很清晰的。 (2)对Demeer5 进行简单的修改: 现在我们对 Demeer5 进行简单的修改,让它在球可踢的时候进行带球的动作。带球就是kick 和dash 动作序列的结合。带球的函数在BasicPlayer 中,函数为dribble().它接收两个参数,第一个参数为带球的方向,第二个参数为带球的类型。 带球类型解释如下: DRIBBLE_FAST:快速带球; DRIBBLE_SLOW:慢速带球; DRIBBLE_WITHBALL:安全带球; 所以,对 dribble 的一种调用形式为:dribble(ang,DRIBBLE_FAST )其中 ang 为AngDeg(是一个double)类型该函数的返回值是一个 SoccerCommand 类型。知道了如何调用 dribble,我们来对Demeer5 进行修改: else if( WM->isBallKickable())

实验报告实验二熟悉汇编程序建立及其调试方式

微机原理实验报告 实验二熟悉汇编程序建立及其调试方式 姓名:吕迪冉晨越 学号: 一、实验目的 1.熟悉汇编语言源程序的框架结构,学会编制汇编程序。

2.熟悉汇编语言上机操作的过程,学会汇编程序调试方法。 二、实验内容 1、学习编写汇编语言源程序的方法,了解数据存放格式。 2、阅读给出的程序,找出程序中的错误。 3、通过调试给出的汇编语言源程序,了解汇编语言程序的建立、汇编、链接、调试、修改和运 行等全过程。 三、实验程序 (一)、源程序 STACKSG: SEGMENT PARA STACK 'STACK' ;冒号 DB 256 DUP(?) STACKSG ENDS DATASG: SEGMENT PARA 'DATA' ;冒号 BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512 DW 23,56,420,75,0,-1024,-67,39,-2000 COUNT EQU 20 MAX DW ? CODESG: SEGMENT ;冒号 ASSUME CS:CODESG,DS:DATASG,SS:STACKSG ORG 100H BEGIN: MOV DS, DATASG;应为 MOV AX,DATASG MOV DS,AX LEA SI,BLOCK MOV CX,COUNT DEC CX MOV AX,[SI] CHKMAX ADD SI,2 ;应加冒号 CMP [SI],AX JLE NEXT MOV AX,[SI] DEC CX ;删除 NEXT: LOOP CHKMAX MOV MAX,AX MOV AH,4CH INT 21H CODESG ENDS END BEGIN (二)、修改后程序 STACKSG SEGMENT PARA STACK 'STACK' DB 256 DUP(?) STACKSG ENDS ;定义堆栈段 DATASG SEGMENT PARA 'DATA' ;定义数据段 BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512 ;BLOCK有20个字 DW 23,56,420,75,0,-1024,-67,39,-2000

汇编语言实验报告

实验报告 实验课程:汇编语言程序设计 学生姓名: 学号: 专业班级: 2010年 1月 12 日

目录 试验一 (3) 试验二 (6) 试验三 (8) 试验四 (11) 试验五 (13) 试验六 (17) 试验七 (21)

实验1 利用DEBUG调试汇编语言程序段 一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 2.学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应该试用一下; 3.用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。 三.实验要求 1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子; 2.作为例子,准备用A命令,输入在显示器上显示字符“$”的系统调用程序段; 3.编写将AX左移9位的程序段。 四.实验环境 PC微机 DOS操作系统或Windows 操作系统 MASM.EXE,LINK.EXE,https://www.wendangku.net/doc/412541729.html,或宏汇编集成环境 五.实验步骤 1.在DOS提示符下,进入DEBUG程序; 在DOS环境下输入debug进入debug程序 Dubug程序窗口 2.在DOS目录下启动DEBUG;

3.详细记录每一步所用的命令,以及查看结果的方法和具体结果。D命令 E命令 R命令 A命令及T命令及乘法 除法 加法及减法

在debug中实现输出'$’ AX中的内容左移9位 六.实验报告要求 1.如何启动和退出DEBUG程序; 2.整理每个DEBUG命令使用的方法,实际示例及执行结果。 七.思考题 启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现? 答:启动debug后,要装入一个exe文件,可以先推出debug,再输入debug后面加文件名,然后-l

汇编语言循环程序实验报告

一、实验目的 (1) 加深对循环结构的理解; (2) 掌握循环程序的设计方法; (3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。 二、实验内容 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。 2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。 3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。 三、算法描述流程图 实验内容1、2、3的流程图分别为图1、图2、图3。

图 1 图 2 图3

四、实验步骤 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。 1)输入源程序: DATA SEGMENT BUF DW 23,123,-12,-210,45,0,90,-453 BUF1 DW 8 DUP(0) BUF2 DW 8 DUP(0) A DW ? B DW ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA BX, BUF LEA SI, BUF1 LEA DI, BUF2 MOV A,0 MOV B,0 MOV CX,8 L0: MOV AX,[BX] CMP AX,0 JGE L1 MOV [DI],AX ADD DI,2 INC B JMP NEXT L1: MOV [SI],AX ADD SI,2 INC A NEXT: ADD BX,2 LOOP L0 MOV AH, 4CH INT 21H CODE ENDS END START 2)运行程序。

相关文档