北京理工大学汇编语言实验三 字符串操作实验
时间:2025-07-09
时间:2025-07-09
北京理工大学 汇编语言实验 实验报告 汇编程序代码
字符串操作实验(设计性实验)
实验三
北京理工大学 汇编语言实验 实验报告 汇编程序代码
一、实验要求和目的
1.了解汇编语言字符串处理基本流程;
2.熟悉汇编语言宇符串处理基本指令的使用方法; 3.掌握利用汇编语言实现宇符串处理的程序设计方法。
二、软硬件环境
1.硬件环境:计算机系统windows
2.软件环境:装有MASM 、DEBUG 、LINK 、等应用程序.
三、实验涉及的主要知识 1.字符串处理基本操作流程
(1)利用SI寄存器保存源串首地址 (2)利用DI寄存器保存目的串首地址 (3)利用CX寄存器保存字符串长度
(4)的利用CLD或STD指令设置字符串处理方向. (5)利用宇符串处理指令实现相关处理.
2.重复前缀指令
重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次计数器cx中值减1,当cx 中值减至0时,停止重复执行,继续执行下一条指令。
REP 无条件重复串操作直到计数寄存器的内容CX为0为止. 经常与REP配合工作的宇符串处理指令有MOVS,STOS和LODS。
REPE/REPZ 判断计数寄存器的内容CX 是否为0或ZF=O (即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行. 可以与REPE/REPZ 配合工作的串指令有CMPS和SCAS。
REPNE/REPNZ 判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行. 可以与REPE/REPZ 配合工作的串指令有CMPS和SCAS。
3.字符串处理基本指令
(1) MOVS 传送指令
格式:MOVS DST,SRC 或MOVSB (传送宇节)或MOVSW (传送字)。后而两种形式需要与REP指令结合使用。
该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由
北京理工大学 汇编语言实验 实验报告 汇编程序代码
目的变址寄存器(D S T)指向的附加段中的一个宇(或字节)中去,同时,根据方向标志及数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改. (2 ) STOS 存入串指令
格式STOS DST 或STOSB (存入字节)或STOSW (存入字)。
该指令把AL或AX的内容存入由目的变址寄存器指向的附加段的某单元中,井根据方向标志( DF ) 相数据类型修改日的变址寄存端的内容. (3) LODS 从串取指令
格式LODS SRC 或LODSB (取字节)或LODSW (取字)
该指令把由源变址寄存器指向的数据段中某单元的内容传送到AL或AX中,并根据方向标志和数据类型修改源变址寄存器的内容。 (4) CMPS 串比较指令 DST或CMPSB或CMPSW .
该指令把由变址寄存器指向的数据段中的一个字节或字与由目的变址寄存器所指向的附加段中的一个字节或字相减,但不保存结果,只根据结果设置条件标志。
该指令与REPE/REPZ或REPNE/REPNZ 结合,可以比较两个数据串。 (5)SCAS 串扫描指令
格式:SCASDST或SCASB或SCASW 。
该指令把AL或AX 的内容与由目的变址寄存器所指向的附加段中的一个字节或字进行比较,并不保存结果,只根据结果设置条件码。
该指令与REPE/REPZ 或REPNE/REPNZ 结合,可以从某个字符串中查找一个指定的字符。 总的来说,字符串处理可以将缓冲区中个数据块搬至存储器的另处,比较两个宇符串是否相等,从缓冲区中一个数据块寻找某一个特定的关键字,顺次从一个缓冲区取字符或顺次向一个缓冲区存字符等.
四、程序流程图设计
北京理工大学 汇编语言实验 实验报告 汇编程序代码
N
N
北京理工大学 汇编语言实验 实验报告 汇编程序代码
五、实验结果
注:最上方为最终寄存器结果 -g后为执行结果 0001为第一题输出 0002为第二题执行完成标志,具体结果见d ds:0后数据段内存输出 0000为第三题输出 000a为第四题输出,即10个。
六、汇编代码
DATAS SEGMENT
;此处输入数据段代码 str1 db 'The United States of America' n1 dw ($-str1)
str2 db 'The United states of America' n2 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 0 tempcx dw 0 tab db '0123456789abcdef ' DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码 dw 32 dup(0) STACKS ENDS
CODES SEGMENT ASSUME
CS:CODES,DS:DATAS,SS:STACKS START:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV AX,DATAS MOV DS,AX MOV ES,AX mov ax,STACKS mov ss,ax mov ax,0040h mov 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,str3 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 skip2 change2: mov temp,1
skip2: call print call newline call newline
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3 END ;;;;;;;;;;;;;;;;;;;;;;;; …… 此处隐藏:1956字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:《户外勇者》电视节目策划