北京理工大学汇编语言实验三字符串操作实验

上传人:正** 文档编号:42128975 上传时间:2018-06-01 格式:DOC 页数:7 大小:224.33KB
返回 下载 相关 举报
北京理工大学汇编语言实验三字符串操作实验_第1页
第1页 / 共7页
北京理工大学汇编语言实验三字符串操作实验_第2页
第2页 / 共7页
北京理工大学汇编语言实验三字符串操作实验_第3页
第3页 / 共7页
北京理工大学汇编语言实验三字符串操作实验_第4页
第4页 / 共7页
北京理工大学汇编语言实验三字符串操作实验_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《北京理工大学汇编语言实验三字符串操作实验》由会员分享,可在线阅读,更多相关《北京理工大学汇编语言实验三字符串操作实验(7页珍藏版)》请在金锄头文库上搜索。

1、实验三实验三 字符串操作实验(设计性实验)字符串操作实验(设计性实验)一、实验要求和目的一、实验要求和目的1了解汇编语言字符串处理基本流程; 2熟悉汇编语言宇符串处理基本指令的使用方法; 3掌握利用汇编语言实现宇符串处理的程序设计方法。二、软硬件环境二、软硬件环境1.硬件环境:计算机系统 windows 2.软件环境:装有 MASM 、DEBUG 、LINK 、等应用程序.三、实验涉及的主要知识三、实验涉及的主要知识1.字符串处理基本操作流程字符串处理基本操作流程(1)利用 SI 寄存器保存源串首地址 (2)利用 DI 寄存器保存目的串首地址 (3)利用 CX 寄存器保存字符串长度 (4)的利

2、用 CLD 或 STD 指令设置字符串处理方向. (5)利用宇符串处理指令实现相关处理.2重复前缀指令重复前缀指令重复次数由计数寄存器 CX 中存放的值决定, 指令每重复执行一次计数器 cx 中值减 1,当 cx 中值减至 0 时,停止重复执行, 继续执行下一条指令。 REP 无条件重复串操作直到计数寄存器的内容 CX 为 0 为止. 经常与 REP 配合工作的宇 符串处理指令有 MOVS,STOS 和 LODS。 REPE/REPZ 判断计数寄存器的内容 CX 是否为 0 或 ZF=O (即比较的两个操作数不等), 只要满足一个则重复执行结束, 否则继续执行. 可以与 REPE/REPZ 配

3、合工作的串指令有 CMPS 和 SCAS。 REPNE/REPNZ 判断计数寄存器的内容是否为 0 或 ZF=1(即比较的两个操作数相等),只 要满足一个则重复执行结束, 否则继续执行. 可以与 REPE/REPZ 配合工作的串指令有 CMPS 和 SCAS。3字符串处理基本指令字符串处理基本指令(1) MOVS 传送指令传送指令 格式:MOVS DST,SRC 或 MOVSB (传送宇节)或 MOVSW (传送字)。后而两种形式需要与 REP 指令结合使用。 该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由目的变址寄存器(D S T)指向的附加段中的一个宇(或字节

4、)中去,同时,根据方向标志及 数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改. (2 ) STOS 存入串指令存入串指令 格式 STOS DST 或 STOSB (存入字节)或 STOSW (存入字)。 该指令把 AL 或 AX 的内容存入由目的变址寄存器指向的附加段的某单元中,井根据方 向标志( DF ) 相数据类型修改日的变址寄存端的内容. (3) LODS 从串取指令从串取指令 格式 LODS SRC 或 LODSB (取字节)或 LODSW (取字) 该指令把由源变址寄存器指向的数据段中某单元的内容传送到 AL 或 AX 中,并根据方 向标志和数据类型修改源变址寄存器的内容

5、。 (4) CMPS 串比较指令串比较指令 DST 或 CMPSB 或 CMPSW . 该指令把由变址寄存器指向的数据段中的一个字节或字与由目的变址寄存器所指向的 附加段中的一个字节或字相减,但不保存结果,只根据结果设置条件标志。 该指令与 REPE/REPZ 或 REPNE/REPNZ 结合,可以比较两个数据串。 (5)SCAS 串扫描指令串扫描指令 格式:SCAS DST 或 SCASB 或 SCASW 。 该指令把 AL 或 AX 的内容与由目的变址寄存器所指向的附加段中的一个字节或字进行 比较,并不保存结果,只根据结果设置条件码。 该指令与 REPE/REPZ 或 REPNE/REPN

6、Z 结合,可以从某个字符串中查找一个指定的字 符。 总的来说,字符串处理可以将缓冲区中个数据块搬至存储器的另处, 比较两个宇符串 是否相等, 从缓冲区中一个数据块寻找某一个特定的关键字,顺次从一个缓冲区取字符或 顺次向一个缓冲区存字符等.四、程序流程图设计四、程序流程图设计Cx=Cx-1输出相等开始两串长度相等取字符串长度存入 CXY结束输出不相等第 cx 个字符相等 且 cx!=0YNNCx=0YN开始两串长度相等Y第 cx 个字符相等 且 cx!=0YNYN取字符串长度存入 CXcx!=0Y复制当前字符YCx=Cx-1结束开始N取字符串长度存入 CXcx!=0YCx=Cx-1结束不是!YN

7、输出 0输出 1开始N取字符串长度存入 CXcx!=0若当前字符=. AX 加 1YCx=Cx-1结束AX=0输出 AX五、实验结果五、实验结果注:最上方为最终寄存器结果 -g 后为执行结果 0001 为第一题输出 0002 为第二题执行完成标志,具体结果见 d ds:0 后数据段内存输出 0000 为第三题输出 000a 为第四题输出,即 10 个。六、汇编代码六、汇编代码DATAS SEGMENT;此处输入数据段代码 str1 db The United States of American1 dw ($-str1)str2 db The United states of American

8、2 dw ($-str2)str3 db 128 dup(0)n3 dw ($-str3)str4 db The ! is a symbol.n4 dw ($-str4)str5 db how.many.?n5 dw ($-str5)temp dw 0tempcx dw 0tab db 0123456789abcdef DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码dw 32 dup(0) STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STAC KS START: ;MOV AX,DATASMOV DS,AXMOV

9、 ES,AXmov ax,STACKSmov ss,axmov ax,0040hmov sp,ax;1 mov temp,1 mov ax,n1 mov bx,n2 cmp ax,bx jnz skip1 lea dx,str1 mov di,ax lea ax,str2 mov si,ax mov cx,n1 cld repe cmpsb jcxz change1 jmp skip1 change1: mov temp,0 skip1:call print call newline call newline ;1 END ;2 lea ax,str1 mov si,ax lea ax,str

10、3 mov di,ax mov cx,n1 cld rep movsb mov temp,2 call print call newline call newline ;2 END ;3 mov temp,0 lea ax,str4 mov di,ax mov cx,n4 mov al,! cld repne scasb jcxz change2 jmp skip2change2: mov temp,1 skip2:call print call newline call newline ;3 END ;4 mov temp,0 lea ax,str5 mov di,ax mov cx,n5

11、mov al,. cld l:repne scasb jcxz skip3 inc temp jmp l skip3:call print call newline;4 ENDMOV AH,4CH INT 21H ; print:;output the ASCII in temp ;1 mov ax,temp mov cx,4 shr ah,cl mov al,ah mov ah,0 lea bx,tab add bx,ax mov dl,ds:bx mov ah,2 int 21h ;2 mov ax,temp and ah,0fh mov al,ah mov ah,0 lea bx,tab

12、 add bx,axmov dl,ds:bx mov ah,2 int 21h ;3 mov ax,temp mov cx,4 shr al,cl mov ah,0 lea bx,tab add bx,ax mov dl,ds:bx mov ah,2 int 21h ;4 mov ax,temp and al,0fh mov ah,0 lea bx,tab add bx,ax mov dl,ds:bx mov ah,2 int 21h retnewline: mov ah,2 mov dl,0dh int 21h mov ah,2 mov dl,0ah int 21h ret space: lea bx,tab mov dl,ds:bx+16 mov ah,2 int 21h retCODES ENDSEND START七、思考题七、思考题可用循环 loop 指令方式实现,比较时采用 cmp 比较字符 ASCII 值的方式实现,并通过 跳转对不同结果进行处理。 采用循环方式需要更多的指令才能完成相应功能,而采用字符串处理指令则使得程序 更加简洁,且处理时更方便。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号