汇编语言上机实验报告一文档格式.docx
《汇编语言上机实验报告一文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言上机实验报告一文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
操作提示:
利用TD.EXE调试程序时,应先单步执行各个语句,每执行一条语句,都应观看数据段中的内容和相应寄放器的转变。
二实验要求
把握大体的程序设计框架和方式、熟悉经常使用指令的用法、熟悉DOS功能挪用、进一步把握TD的利用方式。
三寄放器分派和变量概念说明
此题利用LOOP做循环,一一将BUF中的字节复制到NEW_BUF中。
1存储单元分派
BUF:
寄存初始串’howareyou’
NEW_BUF:
寄存复制的字符串
2寄放器分派
BX:
BUF的偏移地址
BP:
NEW_BUF的偏移地址
CX:
记录循环次数
SI,DI:
别离用作BUF和NEW_BUF的变址寄放器
AX:
临时寄放器
四流程图
五源代码
DATASEGMENT
BUFDB'
N=$-BUF
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETBUF
MOVBP,OFFSETNEW_BUF
MOVCX,N
MOVSI,CX
MOVDI,0
DECSI
LINE:
MOVAL,[BX+DI]
MOVDS:
[BP+SI],AL
INCDI
LOOPLINE
CODEENDS
ENDSTART
六运行结果
用td调试程序,能够看到在数据段里NEW_BUF已经寄存了倒置的BUF.
实验二
一题目
假设数据段概念如下:
DATASEGMENT
STRINGDB‘ThePersonalComputer&
TV’
试用字串操作等指令编程完成一下功能:
(1)把该字符串传送到附加段中偏移量为GET_CHAR开始的内存单元中。
(2)
(3)检查该字符串是不是有‘&
’符,假设有那么用空格符将其替换。
(4)把字符串大写字母传送到附加段中CAPS开始的单元中,其余字符传到以CHART开始的单元中。
然后将数据段中存储上述字符串的单元清零。
学会熟练适用字符串操作指令。
此题利用字符串操作指令MOVSB,CMPSB,SCASB等实现字符串的传递,比较,搜索等功能。
1变量概念说明
(1)关于第一问,数据段中STRING用于寄存初始字符串,附加段中GET_CHAR用于寄存复制后的字符串。
(2)关于第二问,附加段中COM用于寄存待比较的字符串’TheComputer’。
(3)关于第三问,没有效到附加段,只是用到了数据段中的初始字符串STRING。
(4)关于第四问,附加段中CAPS用于寄存大写字母,CHART用于寄存其他字母。
SI:
寄存源串的偏移地址。
DI:
寄存目串的偏移地址。
CX:
寄存循环计数值。
AX,BX:
临时利用的的寄放器。
四流程图
(1)
(3)
是
利用STOS传到CAPS
CX为0?
结束
否
交换BX,DI
(4)
STRINGDB'
ThePersonalComputer&
TV'
NEQU$-STRING
HELLOSEGMENT
GET_CHARDB100DUP(0)
CAPSDB100DUP(0)
CHARTDB100DUP(0)
COMDB'
TheComputer'
COMPAREDB0
NUMBERDB0
HELLOENDS
DATA,ES:
HELLO
MOVAX,HELLO
MOVES,AX
LEASI,STRING
LEADI,GET_CHAR
CLD
REPMOVSB
MOVBL,0
CMPCX,12
JNELINEB
MOVAL,1
LEADI,COM
MOVBX,CX
REPECMPSB
JNELINEA
JMPLINEC
LINEA:
MOVAL,0
SUBBX,CX
LINEB:
LINEC:
MOVCOMPARE,AL
MOVNUMBER,BL
MOVAL,'
&
'
LEADI,STRING
REPNESCASB
JZCHANGE
JMPLINED
CHANGE:
MOVBYTEPTRDS:
[DI-1],'
'
LINED:
LEADI,CAPS
LEABX,CHART
LINEF:
LODSB
CMPAL,41H
JBLINEG
CMPAL,5AH
JALINEG
STOSB
MOVBYTEPTR[SI-1],0
JMPLINEH
LINEG:
XCHGBX,DI
LINEH:
LOOPLINEF
(1)运行后将原字符串放在了附加段偏移地址为0000的区域,如下
(2)由于两字符串长度为零,因此不相等,比较次数为零。
(3)运行后已将&
替换为空格,如下
(4)运行后已将大写字母放在一路,其他字母放在另一区域,如下
实验三
编程将AX寄放器中的内容以相反的顺序传送到DX寄放器中,并要求AX中的内容不被破坏,然后统计DX寄放器中1的个数是多少。
熟练把握移位指令的利用。
此题先将AX中的数据循环右移,每移一名,都将移出位从DX右端移入,如此移动16次后DX即是AX的倒转的数。
数据段中的PRINT,HELLO,KITTY是用来寄存一些用于输出的字符串。
用于寄存原始数据
DX:
用于寄存倒转后的数据
BL:
记录DX中1的个数
PRINTDB'
Thenumberof1inDXis:
$'
HELLODB0DH,0AH,'
KITTYDW0
CODESEGMENT
MOVAX,34H
MOVCX,16
RORAX,1
JCLINEB
INCBL
RCLDX,1
LOOPLINEA
MOVKITTY,DX
LEADX,PRINT
MOVAH,9
INT21H
MOVDL,BL
ADDDL,30H
MOVAH,2
LEADX,HELLO
MOVAX,4C00H
六运行结果
程序运行后能够看到DX中是AX的反转,如下所示
而且将DX中的1的个数输出,如以下图中最后一行:
实验四
将以BUF为首地址的字节存储区中的既能被2整除也能被7整除的无符号整数的个数(假定≤9)显示出来,同时对应的显示它们别离对应的地址偏移量。
此题将0-255中能被2和7整除的数列表,关于需要检测的数,将其和该表一一对照,可知其是不是能被2和7的整除。
1变量概念说明
数据段中STAND用于寄存0-255中能被2和7整除的数,NUMBER用于寄存待检测的数。
其他变量用于显示输出。
用于寄存目的串偏移地址
用于记录循环次数
BX,DX,AX:
临时利用
NUMBERDB0,7,14,25,72,56,70
NAEQU$-NUMBER
STANDDB0,14,28,42,56,70,84,98,112,126,140,154,168,182,196,210,224,238,252
NBEQU$-STAND
PRINTADB'
Number'
'
PRINTBDB'
Address'
PRINTCDB0DH,0AH,'
LEADX,PRINTB
LEADX,PRINTC
MOVCX,NA
MOVBX,0
MOVSI,0
MOVAL,[BX]
LEADI,STAND
PUSHCX
MOVCX,NB
JZLINEB
INCSI
POPCX
INCBX
LEADX,PRINTA
INT