微原实验报告二.docx

上传人:b****4 文档编号:3937035 上传时间:2023-05-06 格式:DOCX 页数:16 大小:110.87KB
下载 相关 举报
微原实验报告二.docx_第1页
第1页 / 共16页
微原实验报告二.docx_第2页
第2页 / 共16页
微原实验报告二.docx_第3页
第3页 / 共16页
微原实验报告二.docx_第4页
第4页 / 共16页
微原实验报告二.docx_第5页
第5页 / 共16页
微原实验报告二.docx_第6页
第6页 / 共16页
微原实验报告二.docx_第7页
第7页 / 共16页
微原实验报告二.docx_第8页
第8页 / 共16页
微原实验报告二.docx_第9页
第9页 / 共16页
微原实验报告二.docx_第10页
第10页 / 共16页
微原实验报告二.docx_第11页
第11页 / 共16页
微原实验报告二.docx_第12页
第12页 / 共16页
微原实验报告二.docx_第13页
第13页 / 共16页
微原实验报告二.docx_第14页
第14页 / 共16页
微原实验报告二.docx_第15页
第15页 / 共16页
微原实验报告二.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微原实验报告二.docx

《微原实验报告二.docx》由会员分享,可在线阅读,更多相关《微原实验报告二.docx(16页珍藏版)》请在冰点文库上搜索。

微原实验报告二.docx

微原实验报告二

实验二:

汇编语言程序设计

一、实验目的

1)掌握MASM的操作步骤,能够将源程序编译成可执行文件。

2)掌握简单的汇编语言程序的设计(建立及调试)。

二、实验任务及内容

1.实验任务

①、编一程序,在显示器上显示256个ASCII代码,要求显示格式为每行显示16个字符,两个ASCII字符间空一格。

②、将地址偏移量为100H单元开始的256个单元写入00h,01h,02h…ffh,并统计正负0元素个数写入数据块之后的三个单元中,并用DOS调用将各数据块中的内容显示出来。

③、将键入的16进制数转化为十进制数显示出来,键入最大值为ffffh,若键入的不是十进制数则显示出错信息。

2.源程序

1.DATASEGMENT;定义数据段

DB256DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA;数据段赋值

MOVDS,AX

MOVCX,256

MOVDH,0

LOP:

TESTDH,00001111B;判断是否显示16个字符换行

JNZNEXT

MOVDL,13;换行

CALLDISP

MOVDL,10

CALLDISP

NEXT:

MOVDL,DH;显示字符

CALLDISP

MOVDL,'';两字符间加空格

CALLDISP

INCDH;使用DH计数

LOOPLOP

DONE:

;退出程序

MOVAH,4CH

INT21H

DISPPROCNEAR;在屏幕上显示字符

PUSHAX

MOVAH,2

INT21H;DOS功能调用

POPAX

RET

DISPENDP

CODEENDS

ENDSTART

2.datasegment

;inputdatasegmentcodehere

org100h

bufdb259dup(?

countequ$-buf

dataends

stacksegment

;inputstacksegmentcodehere

sdb256dup(?

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movax,stack

movss,ax

movsp,offsets

movsi,offsetbuf

movcx,256

xorax,ax

xorbx,bx

xordh,dh

next:

mov[si],al

cmpal,0h

jzzero;如果这个数为0,则0的个数加一

cmpal,80H

janega;同理负数个数加一

jmppos

zero:

incdh

;deccx

incal

jmpnext2

nega:

incbl

;incsi

incal

jmpnext2

pos:

incbh

incal

jmpnext2

next2:

incsi

loopnext

mov[si],dh;将等于0的数的多少装入dh,再放在数据块之后

incsi

mov[si],bx

movsi,offsetbuf

movcx,count

zrbh:

movbh,16;每行显示16个,便于观看

next3:

moval,[si]

movbl,al

shral,1;右移4位,比较高四位

shral,1

shral,1

shral,1

cmpal,0ah;判断高四位是字母还是数字

jcjia30;如果是数字,加30h变成对应的ASCII码

addal,07h;如果是字母,则要加37

jia30:

addal,30h

callDIS;显示高四位

;INT21H

moval,bl;恢复原来的数

andal,0fh;屏蔽高四位

cmpal,0ah

jcjia30a

addal,7h

jia30a:

addal,30h

callDIS

moval,20h;在两个数之间加一个空格,便于显示

callDIS

incsi

loopnext4;循环完毕,当不再loop时,跳转至程序结束的地方

jmpstop

next4:

decbh

jnznext3

moval,0ah;若有16个数,则送回车,换行0ah,0dh

callDIS

;MOVAH,0BH

moval,0dh

callDIS

jmpzrbh;继续处理下一行

;inputcodesegmentcodehere

stop:

movah,4ch

int21h

DISprocnear

movdl,al

movah,2

int21h

;MOVAH,0BH

RET

;movdl,al

DISendp

codeends

endstart

3.datasegment

overdb'errorcharacter!

$'

dataends

stacksegment

sdb512dup(?

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

crlfmacro;定义宏,送回车换行符

movdl,0dh

movah,2

int21h

movdl,0ah

movah,2

int21H

endm

start:

movax,data

movds,ax

movax,stack

movss,ax

movsp,offsets

main:

callhexbin

crlf

callbindec

crlf

jmpmain

;接受的十六进制数转化为二进制数

hexbinprocnear

xorbx,bx

newchar:

movah,01h

int21h

cmpal,0dh

jzretu;键入回车,结束本组输入

;cmpal,30h

;jlexit;若输入小于30h,不是十六进制的字符

;cmpal,10;与9比较

;jbaddto;此时字符为0~9之间,直接转化为ASCII码来显示即可

SUBAL,30H

JLEXIT

CMPAL,09

JLEADDTO

subal,07;若键入的字符不是0~9,则在判断是否属于大小写a~f

cmpal,0ah

JLexit

cmpal,0fh

JGNEXT

;若输入无误,将输入的数向bx里面存

addto:

movcl,4

shlbx,cl;键入的字符左移四位,移入高位

movah,0

addbx,ax

jmpnewchar

;movah,4ch

NEXT:

subal,20h

cmpal,0ah

jLexit

cmpal,0fh

JLEADDTO

jGexit

jmpretu;retu是什么?

;输入有误时,提示输入错

exit:

crlf

movdx,offsetover

movah,09h

int21h

CRLF

jmpnewchar

retu:

ret;子程序结束

hexbinendp

;将二进制转化为十进制的子程序,通过除十取余来实现

bindecprocnear

movcx,10000

calldiv_d

movcx,1000

calldiv_d

movcx,100

calldiv_d

movcx,10

calldiv_d

movcx,1

calldiv_d

ret

bindecendp

;将数字显示出来

div_dprocnear

;CRLF

movax,bx;被除数的低十六位

movdx,0;被除数的高十六位

divcx

movbx,dx;余数在dx中,然后将其转入bx

addal,30h;商在ax中

movdl,al;把商显示出来

movah,2

int21h

ret

div_dendp

codeends

endstart

3.程序流程图

①、

.

②、

③、

三、实验结果

1.

2.

3.

四、实验总结

本次实验让我对汇编语言有了新的认识,用一种新的眼光去认识汇编语言,也加强了自己对汇编语言的使用能力。

本次实验也遇到了很多困难,通过查资料,相互讨论找到了问题的解答方法。

有很多错误都是细节导致了,这说明我需要让自己更加的细心,认真。

还有些问题是基础知识掌握不牢固,我需要重新多翻看课本。

本学期的实验课程适中,我们实验课程不少但也不太多。

建议课程上老师多演示一些实验例子,谢谢。

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

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2