汇编实验10

更新时间:2024-03-22 21:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

暨南大学本科实验报告专用纸

课程名称 汇编语言程序设计 成绩评定 实验项目名称 字符串程序设计 指导教师

一、实验目的和要求

实验目的

1)掌握串操作指令的使用方法。 2)掌握串处理程序的设计方法。

3)熟练使用各种程序结构。 实验内容

1)编写程序把从键盘输入的以回车为结束符的字符串中的空格去掉并按相反的顺序输出。

2)编写程序在字符串STRING1中指定位置插入字符串STRING2。 3)编写程序在字符串STRING1中指定位置删除子串。

4)输入一个字符串(以回车符作为结束),将其排序后输出到屏幕上。

暨南大学本科实验报告专用纸(附页)

二、程序流程图(每题分开写)

开始输入buffer,初始化si和cx[si]=回车?是否Si=空格?否Inc siInc cx是Si=offset buffer+2Si=si+cxInc cxDi=si输出[si]si自减否Inc di[d-1]=di否Cx=cx-1Cx=0?是[di]=回车?是结束

暨南大学本科实验报告专用纸(附页)

开始String1,string2,输入。string6Cl=bl=插入点位置Si=offset string1+2Di=offset string6[Di]=[si]Inc diInc siCx=cx-1否Cx=0?是Si=offset string+2[di]=[si]Inc diInc si[si]为回车符?否是输出string1结束

暨南大学本科实验报告专用纸(附页)

开始输入STRING1输入删除点a和删除长度bSi=offset string1+2Si=si+aCx=string1长度Di=siDi=di+b[si]=[di]Si=si+1Cx=0?Cx=cx-1否输出string1是结束

暨南大学本科实验报告专用纸(附页)

开始Si=offset string +2Cx=string的长度-1Dx=cxBx=siAl=[bx]Al 与【bx+1]交换【bx]=al否Al<=[bx+1]是Bx=bx+1Dx=dx-1Al!=[bx+1]?是否Cx=cx-1否Cx=0?是输出string

暨南大学本科实验报告专用纸(附页)

三、源程序(每题分开写)

DSEG SEGMENT 'DATA' buffer db 50 db 0

db 50 dup('$')

STRING db 'Please enter the string.',0dh,0ah,'$' DSEG ENDS

SSEG SEGMENT STACK db 256 DUP(0) SSEG ENDS

CSEG SEGMENT 'CODE' START PROC FAR ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX

mov ah,09h

mov dx,offset STRING int 21h mov ah,0ah

mov dx,offset buffer int 21h

mov si,offset buffer+2 mov cx,0 outlp:

cmp byte ptr [si],0dh jz done

cmp byte ptr [si],' ' jnz next mov di,si inlp:

inc di

mov al,[di] mov [di-1],al

cmp byte ptr [di],0dh jnz inlp jmp outlp next:

'STACK' 暨南大学本科实验报告专用纸(附页)

inc si inc cx jmp outlp done:

mov si,offset buffer+2 add si,cx inc cx

mov dl,0dh mov ah,02h int 21h mov ah,02h mov dl,0ah int 21h lop:

mov dx,[si] mov ah,02h int 21h dec si loop lop

MOV AX, 4C00h ; exit to operating system. INT 21h START ENDP CSEG ENDS

END START ; set entry point.

2.

DSEG SEGMENT 'DATA' STRING1 db 50 db 0

db 50 dup('$') db '$' STRING2 db 50 db 0

db 50 dup('$') db '$'

STRING3 db 'Please enter the STRING1.' db 0dh,0ah,'$'

STRING4 db 0dh,0ah,'Please enter the STRING2.' db 0dh,0ah,'$'

STRING5 db 0dh,0ah,'Please enter the location in the STRING1 you want.'

暨南大学本科实验报告专用纸(附页)

db 0dh,0ah,'$' STRING6 db 50 dup('$')

DSEG ENDS

SSEG SEGMENT STACK 'STACK' db 256 DUP(0) SSEG ENDS

CSEG SEGMENT 'CODE' START PROC FAR ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX

mov dx,offset STRING3 mov ah,09h int 21h

mov ah,0ah

mov dx,offset STRING1 int 21h

mov dx,offset STRING4 mov ah,09h int 21h

mov ah,0ah

mov dx,offset STRING2 int 21h

mov dx,offset STRING5 mov ah,09h int 21h

mov ah,01h int 21h

sub al,30h mov cx,0 mov cl,al mov bl,al

暨南大学本科实验报告专用纸(附页)

mov si,offset STRING1+2 mov di,offset STRING6 first:

mov dl,byte ptr [si] mov byte ptr [di],dl inc si inc di loop first

mov si,offset STRING2+2 second:

cmp byte ptr [si],0dh jz third next2:

mov dl,byte ptr [si] mov byte ptr [di],dl inc si inc di jnz second third:

mov si,offset STRING1+2 mov bh,0 add si,bx third1:

cmp byte ptr [si],'$' jz forth next3:

mov dx,[si] mov [di],dx inc si inc di jnz third1 forth:

mov si,offset STRING1 mov di,offset STRING6 forth1:

cmp byte ptr [di],'$' jz over next4:

mov dl,byte ptr [di] mov byte ptr [si],dl inc si inc di jnz forth1 over:

暨南大学本科实验报告专用纸(附页)

mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h

mov dx,offset STRING1 mov ah,09h int 21h

MOV AX, 4C00h ; exit to operating system. INT 21h START ENDP CSEG ENDS

END START ; set entry point.

3.

DSEG SEGMENT 'DATA' STRING1 db 50 db 0

db 50 dup('$')

STRING2 db 'Please enter the STRING1.',0dh,0ah,'$'

STRING3 db 0dh,0ah,'Please enter the starting position.',0dh,0ah,'$'

STRING4 db 0dh,0ah,'Please enter the length you want to delete.',0dh,0ah,'$' a dw 0 b dw 0

DSEG ENDS

SSEG SEGMENT STACK 'STACK' db 256 DUP(0) SSEG ENDS

CSEG SEGMENT 'CODE' START PROC FAR ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX

mov dx,offset STRING2

本文来源:https://www.bwwdw.com/article/ycr8.html

Top