汇编语言上机考试题三星题3(二刷)

3.现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其修改为disk, 并将结果在显示器上显示。

重要提示:这道题编写的思路和最早不一致,因为我发现这样做更简单一些

程序的思路是:首先读一个字符串到buf中

然后让SI为buf【2】

DI 为LIB【2】也就是给定字符串的第一个字母

然后让CX等于10,再把CX入栈保护起来

CX=4

执行REPZ CMPSB指令

取出CX,看ZF是不是1,如果是就说明两个字符串相等

如果相等,就进行替换,然后让CX=4,这个时候已经不用执行下一步比较了,进行一个一个替换操作即可。

如果不相等,就把BX+5,然后把BX赋给DI,就是让DI到下一个单词处。

DATAS SEGMENT

    BUF DB 05H

    DB ?

    DB 05H DUP('?')

    LIB DB 0DH,0AH,'data' 

    DB ',name'

    DB ',time'

    DB ',file'

    DB ',code'

    DB ',path'

    DB ',user'

        DB ',exit'

    DB ',quit'

    DB ',text','$'

REPLACE DB 'disk'

DATAS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,ES:DATAS

START:

    MOV AX,DATAS

    MOV DS,AX

    MOV ES,AX

    LEA DX,BUF

    MOV AH,0AH

    INT 21H

    LEA SI,BUF[2]

    LEA DI,LIB[2]

    MOV BX,DI

    MOV CX,10

L:

PUSH CX

CLD

MOV CX,4

REPZ CMPSB

POP CX

JNZ N

MOV SI,BX

LEA DI,REPLACE

MOV CX,4

M: MOV AL,[DI]

MOV [SI],AL

INC DI

INC SI

LOOP M

JMP END0

N:

ADD BX,5

MOV DI,BX

LEA SI,BUF[2]

LOOP L

END0:

LEA DX,LIB

MOV AH,09H

INT 21H


    MOV AH,4CH

    INT 21H

CODES ENDS

END START

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # 常见汇编代码 # 1. 编写程序:比较AX,BX,CX中带符号数的大小,将最大的数放在AX中 code...
    喝豆腐脑加糖阅读 7,629评论 0 0
  • 一个有符号字数组以0为结束标志,编程求这个数组的最大值、 最小值、平均值。 DATAS SEGMENT BUF D...
    魔一方阅读 3,780评论 0 0
  • 这学期有了汇编课,但个人感觉这部分难度还是有一些的,所以写了这篇简书当做自己对于知识的复习,同时也是希望能够再次加...
    kl_w阅读 11,752评论 0 7
  • 简单的bug找了一下午 现有一组字符串为data,name,time,file,code,path,user,ex...
    魔一方阅读 2,607评论 0 0
  • 雨一直下。 嗒嗒。 屋檐溅落的水滴打在青石板上,发出清脆的滴答声。 雨水依旧坐在这间客栈最左边的那张桌子,眼睛一直...
    吾不为丶阅读 4,590评论 10 53