汇编程序Word格式.docx

上传人:b****5 文档编号:17536594 上传时间:2022-12-07 格式:DOCX 页数:34 大小:43.23KB
下载 相关 举报
汇编程序Word格式.docx_第1页
第1页 / 共34页
汇编程序Word格式.docx_第2页
第2页 / 共34页
汇编程序Word格式.docx_第3页
第3页 / 共34页
汇编程序Word格式.docx_第4页
第4页 / 共34页
汇编程序Word格式.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

汇编程序Word格式.docx

《汇编程序Word格式.docx》由会员分享,可在线阅读,更多相关《汇编程序Word格式.docx(34页珍藏版)》请在冰豆网上搜索。

汇编程序Word格式.docx

movdl,byteptrres[si];

依次取res的两个字节,由高到低

pushcx;

保护循环值cx

movcl,4

shrdl,cl;

将dl高四位移到低四位

popcx

ordl,30h;

将dl高四位转化为ASCII

cmpdl,39h;

判断是否大于10

jbenext1

adddl,7;

加7转化为A到E字母输出

next1:

movah,2

int21h

movdl,byteptrres[si]

anddl,0fh;

将dl高四位清零

ordl,30h;

将dl低四位转化为ASCII

cmpdl,39h

jbenext2

adddl,7

next2:

decsi

loopagain

movax,4c00h

int21h

endstart

运行结果截图

⑵、将两数改为3B的压缩BCD码,重复以上实验过程。

例如,这两个数据为888888H、456789H,则其和应为[1]345677H(表示[1]345677)。

moval,byteptrbuf1;

取buf1的低8位

addal,byteptrbuf2;

取buf2的低8位+buf1的低8位

daa;

调整为十进制

movbyteptrres,al;

moval,byteptrbuf1+1;

取buf1的中间8位

adcal,byteptrbuf2+1;

取buf2的中间8位+buf1的中间8位+CF

movbyteptrres+1,al;

moval,byteptrbuf1+2;

取buf1的高8位

adcal,byteptrbuf2+2;

取buf2的高8位+buf1的高8位+CF

movbyteptrres+2,al;

运行结果截图:

实验1-2——BCD码操作

⑴、将存放在首地址为buf的5B的压缩BCD码分离为10B的非压缩BCD码,并存于首地址为res的单元中

原代码如下:

.

bufdt1223568941h;

resdt?

movcx,5

xorsi,si;

置循环次数

leadi,buf;

取其地址

movdl,[di];

取两个字节先保存低四位后保存高四位

置高四位为零

movbyteptrres[si],dl;

保存到res单元

movdl,[di]

保护循环次数

高四位移到第四位,并置高四位为零

popcx

incsi

movbyteptrres[si],dl

incdi

loopagain;

循环继续取值

decsi;

输出,由高位开始输出

movcx,10

again1:

loopagain1

⑵、将存放在首地址为buf的10B的非压缩BCD码合并为5B的压缩BCD码,并存于首地址为res的单元中。

10B的非压缩BCD码数据请自行设计。

bufdt01020203050608090401h;

取两个字节

moval,[di];

再依次取两个字节

pushcx

movcl,4;

其中高位移四位

shlal,cl

ordl,al;

相与后将其前导覆盖

movcx,5

⑶、将存放在内存单元buf(字节)中的BCD码转为相应的数据并存到res(字节)单元。

例如将35H转换为二进制数据应得到23H、即十进制的35。

bufdb35h

movdl,buf

shrdl,cl

movbl,dl;

bl=00000011

anddl,0fh;

dl=00000101

利用移位指令,实现数值bl乘以10

shlbl,1;

bl=00000110

moval,bl

shlbl,1

bl=00011000

addbl,al;

bl=00011110

将乘于十之后的bl与dl相加

addbl,dl;

bl=00100011

movdl,bl

ordl,30h

anddl,0fh

cmpdl,39h

adddl,7

实验1-3——数据的求和、求均

bufdw0,1,2,3,4,5,6,7,8,9,90,91,92,93,94,95,96,97,98,99

res1dw?

res2dw?

res3dw?

leadi,buf

movcx,14h;

循环次数,即20D

xorbx,bx;

运算结果保存在bx里面

adcbx,[di]

adddi,2

movres1,bx;

计算的结果和保存在res1

movdx,0

movax,bx

movbx,0014h

idivbx;

计算平均数

movres2,ax;

所得的商保存在res2

movres3,dx;

所得的余数保存在res3

movbx,res2

movdl,bh;

输出商,形式为十六进制

movdl,bh

jbenext3

next3:

movdl,0ah

movbx,res3

输出余数,形式为十六进制

jbenext4

next4:

jbenext5

next5:

jbenext6

next6:

实验1-4——联合移位、代码转换和字符输出

⑴、将存放在首地址为buf、长度为3B的数据联合左移2位。

例如,左移前为888888H,左移后应为222220H

bufdf888888h

shlwordptrbuf,1;

低四位左移一位

rclwordptrbuf+2,1;

高四位循环左移一位

rclwordptrbuf+2,1;

movbx,wordptrbuf+2

以上输出高两个字节

movbx,wordptrbuf

以上输出中间两个字节

以上输出低两个字节

⑵、将存放在首地址为buf、长度为3B数据,通过调用INT21H的AH=02H子功能、以二进制的形式从屏幕输出。

例如,数据为8421A5H,输出应为“100001000010000110100101”。

.modelsmall

bufdf8421A5h

movcx,08h;

联合向左移位,移位8位

shlwordptrbuf,1

rclwordptrbuf+2,1

movcx,18h;

输出其二进制形式

again2:

联合向左移位,借助CF输出起二进制形式

movdl,0

adcdl,30h;

借助adc将进位标志CF转化为ASCII输出

loopagain2

运行结果截图:

实验1-5——字符串的输入输出

keynum=225

stringdbkeynum;

定义键盘输入需要的缓冲区

db0

dbkeynumdup(0)

string1db'

InputString'

"

$"

输出提示信息InputString

movah,09h

movdx,offsetstring1

输出回车

movah,02h

movdl,0dh

输出换行

输入字符串

movdx,offsetstring

movah,0ah

movbx,offsetstring+1

movcl,[bx]

movch,0

incbx

movdl,[bx]

cmpdl,'

a'

jbdisp

z'

;

比较是否为小写字母

jadisp

subdl,20h;

将小写字母转化为大写字母

disp:

实验1-6——分支形成

⑴、一批单字节有符号数,总共20个,分别统计其中0、正数、负数的个数,并将统计结果分别存放在内存单元res_z、res_p及res_m中。

相关数据请自行设计。

count=20

arraydw-4,5,6,0,-2,3,0,-5,-6,5,3,0,-6,8,7,-5,0,4,-3,4

cplusdb0;

保存正数的个数

cminusdb0;

保存负数的个数

czerodb0;

保存零的个数

movsi,offsetarray

movcx,count

cmp[si],0

jlminus;

小于零转入小于零计数

jzzero;

等于零转入等于零计数

inccplus;

否则计数正数

jmpnext

minus:

inccminus

zero:

incczero

next:

addsi,2

输出正数的个数,二进制形式

movbl,cplus

输出负数的个数,二进制形式

movbl,cminus

输出零的个数,二进制形式

movbl,czero

⑵、调用INT21H的AH=01H功能,接收从键盘输入的一个字符,当它为“F”或“f”时,输出“FORTRAN”并退出;

当它为“B”或“b”时,输出“BASIC”并退出;

当它为“C”或“c”时,输出“C/C++”并退出,当它为“P”或“p”时输出“PASCAL”并退出,如果输入其他字符,则什么也不输出、鸣笛一声退出

FORTRAN'

string2db'

BASIC'

string3db'

C/C++'

string4db'

PASCAL'

movah,01h

cmpal,'

F'

判断是否输入为F和f

jenext1

f'

jenext1;

如果是,转入next1

B'

判断是否输入为B和b

jenext2

b'

jenext2;

如果是,转入next2

C'

判断是否输入为C和c

jenext3

c'

jenext3;

如果是,转入next3

P'

判断是否输入为P和p

jenext4

p'

jenext4;

如果是,转入next4

jmpnext5;

否则转入next5

movah,09h

movdx,offsetstring1;

显示string1

movdx,offsetstring2;

显示string2

mov

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

当前位置:首页 > 高中教育 > 高中教育

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

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