1、操作提示:利用TD.EXE调试程序时,应先单步执行各个语句,每执行一条语句,都应观看数据段中的内容和相应寄放器的转变。二 实验要求把握大体的程序设计框架和方式、熟悉经常使用指令的用法、熟悉DOS功能挪用、进一步把握TD的利用方式。三 寄放器分派和变量概念说明此题利用LOOP做循环,一一将BUF中的字节复制到NEW_BUF中。1 存储单元分派BUF: 寄存初始串how are you NEW_BUF: 寄存复制的字符串2寄放器分派BX: BUF 的偏移地址BP:NEW_BUF的偏移地址CX:记录循环次数SI,DI:别离用作BUF和NEW_BUF的变址寄放器AX:临时寄放器四 流程图五 源代码DA
2、TA SEGMENT BUF DB N=$-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BX,OFFSET BUF MOV BP,OFFSET NEW_BUF MOV CX,N MOV SI,CX MOV DI,0 DEC SILINE: MOV AL,BX+DI MOV DS:BP+SI,AL INC DI LOOP LINECODE ENDS END START 六 运行结果用td调试程序,能够看到在数据段里NEW_BUF已经寄存了倒置的BUF.实验二一 题目假设数据段概念如
3、下:DATA SEGMENTSTRING DB The Personal Computer & TV试用字串操作等指令编程完成一下功能:(1)把该字符串传送到附加段中偏移量为GET_CHAR开始的内存单元中。(2)(3)检查该字符串是不是有&符,假设有那么用空格符将其替换。(4)把字符串大写字母传送到附加段中CAPS开始的单元中,其余字符传到以CHART开始的单元中。然后将数据段中存储上述字符串的单元清零。学会熟练适用字符串操作指令。此题利用字符串操作指令MOVSB,CMPSB,SCASB等实现字符串的传递,比较,搜索等功能。1 变量概念说明(1)关于第一问,数据段中STRING用于寄存初始字
4、符串,附加段中GET_CHAR用于寄存复制后的字符串。(2)关于第二问,附加段中COM用于寄存待比较的字符串The Computer。(3)关于第三问,没有效到附加段,只是用到了数据段中的初始字符串STRING。(4)关于第四问,附加段中CAPS用于寄存大写字母,CHART用于寄存其他字母。SI:寄存源串的偏移地址。DI:寄存目串的偏移地址。CX:寄存循环计数值。AX,BX:临时利用的的寄放器。四流程图(1)(3)是利用STOS传到CAPSCX为0?结束否交换BX,DI(4)STRING DB The Personal Computer & TVN EQU $-STRINGHELLO SEGM
5、ENT GET_CHAR DB 100 DUP(0)CAPS DB 100 DUP(0)CHART DB 100 DUP(0)COM DB The ComputerCOMPARE DB 0NUMBER DB 0HELLO ENDSDATA,ES:HELLO MOV AX,HELLO MOV ES,AX LEA SI,STRING LEA DI,GET_CHAR CLD REP MOVSB MOV BL,0 CMP CX,12 JNE LINEB MOV AL,1 LEA DI,COM MOV BX,CX REPE CMPSB JNE LINEA JMP LINECLINEA: MOV AL,0
6、 SUB BX,CXLINEB:LINEC: MOV COMPARE,AL MOV NUMBER,BL MOV AL,& LEA DI,STRING REPNE SCASB JZ CHANGE JMP LINEDCHANGE: MOV BYTE PTR DS:DI-1, LINED: LEA DI,CAPS LEA BX,CHARTLINEF: LODSB CMP AL,41H JB LINEG CMP AL,5AH JA LINEG STOSB MOV BYTE PTR SI-1,0 JMP LINEHLINEG: XCHG BX,DILINEH: LOOP LINEF(1)运行后将原字符串
7、放在了附加段偏移地址为0000的区域,如下(2)由于两字符串长度为零,因此不相等,比较次数为零。(3)运行后已将&替换为空格,如下(4)运行后已将大写字母放在一路,其他字母放在另一区域,如下实验三编程将AX寄放器中的内容以相反的顺序传送到DX寄放器中,并要求AX中的内容不被破坏,然后统计DX寄放器中1的个数是多少。熟练把握移位指令的利用。此题先将AX中的数据循环右移,每移一名,都将移出位从DX右端移入,如此移动16次后DX即是AX的倒转的数。数据段中的PRINT,HELLO,KITTY是用来寄存一些用于输出的字符串。用于寄存原始数据DX:用于寄存倒转后的数据BL:记录DX中1的个数 PRINT
8、 DB The number of 1 in DX is :$ HELLO DB 0DH,0AH, KITTY DW 0CODE SEGMENT MOV AX,34H MOV CX,16 ROR AX,1 JC LINEB INC BL RCL DX,1 LOOP LINEA MOV KITTY,DX LEA DX,PRINT MOV AH,9 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 LEA DX,HELLO MOV AX,4C00H六运行结果程序运行后能够看到DX中是AX的反转,如下所示而且将DX中的1的个数输出,如以下图中最后一行:实验四将以BUF为首地
9、址的字节存储区中的既能被2整除也能被7整除的无符号整数的个数(假定9)显示出来,同时对应的显示它们别离对应的地址偏移量。此题将0-255中能被2和7整除的数列表,关于需要检测的数,将其和该表一一对照,可知其是不是能被2和7的整除。1变量概念说明数据段中STAND用于寄存0-255中能被2和7整除的数,NUMBER用于寄存待检测的数。其他变量用于显示输出。用于寄存目的串偏移地址用于记录循环次数BX,DX,AX:临时利用 NUMBER DB 0,7,14,25,72,56,70 NA EQU $-NUMBER STAND DB 0,14,28,42,56,70,84,98,112,126,140,154,168,182,196,210,224,238,252 NB EQU $-STAND PRINTA DB Number, PRINTB DB Address PRINTC DB 0DH,0AH, LEA DX,PRINTB LEA DX,PRINTC MOV CX,NA MOV BX,0 MOV SI,0 MOV AL,BX LEA DI,STAND PUSH CX MOV CX,NB JZ LINEB INC SI POP CX INC BX LEA DX,PRINTA INT
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1