汇编语言:从键盘输入字符,以回车键结束,将字符串中包含的字母输出到屏幕第2行,包含的数字输出到第3行

汇编语言:从键盘输入字符,以回车键结束,将字符串中包含的字母输出到屏幕第2行,包含的数字输出到第3行,第1张

        CODE  SEGMENT

              ASSUME    CS:CODE

      START:  JMP       BBB

        MSG1  DB        'please input: $'

        STR0  DB        255

        STR1  DB        ?

        STR2  DB        255 DUP('$')

      ALPHA0  DB        13,10

       ALPHA  DB        255 DUP('$')

     NUMBER0  DB        13,10

      NUMBER  DB        255 DUP('$')

        BBB:  PUSH      CS

              POP       DS

              PUSH      CS

              POP       ES

              MOV       AH,9

              LEA       DX,MSG1

              INT       21H

              MOV       AH,10

              LEA       DX,STR0

              INT       21H

              MOV       CL,STR1

              MOV       CH,0

              LEA       SI,STR2

              LEA       BX,ALPHA

              LEA       DI,NUMBER

              CLD

         @0:

              LODSB

              CMP       AL,'0'

              JB        @10

              CMP       AL,'9'

              JA        @1

              STOSB

              JMP       @10

         @1:

              CMP       AL,'A'

              JB        @10

              CMP       AL,'Z'

              JA        @2

              MOV       [BX],AL

              INC       BX

              JMP       @10

         @2:

              CMP       AL,'a'

              JB        @10

              CMP       AL,'z'

              JA        @10

              MOV       [BX],AL

              INC       BX

        @10:

              LOOP      @0

              

              MOV       AH,9

              LEA       DX,ALPHA0

              INT       21H

              LEA       DX,NUMBER0

              INT       21H

              

              MOV       AH,4CH

              INT       21H

        CODE  ENDS

              END       START

你的程序有两个错误

1。调用mov

ah,0ah

int21h

后dx指向的是缓冲区的开始,不是结尾,因此你加$的位置应该是:缓冲区开始地址+2+输入字节

2。显示时,dx应该指向字符串的开始,而不是缓冲区的开始,两者差两个字节。

调试好的程序如下:

DATAS

SEGMENT

buffer

db

80

db

0

db

80

dup

(0)此处输入数据段代码

DATAS

ENDS

STACKS

SEGMENT

此处输入堆栈段代码

STACKS

ENDS

CODES

SEGMENT

ASSUME

CS:CODES,DS:DATAS,SS:STACKS

START:

mov

ah,0ah

mov

dx,seg

buffer

mov

ds,dx

lea

dx,buffer

int

21h

inc

dx

mov

si,dx

mov

cl,byte

ptr

[si]

输入的字节数

mov

ch,0

add

si,2

add

si,cx

字符串结尾

mov

byte

ptr

[si],'$'

push

ds

pop

es

mov

di,offset

buffer

mov

ax,0a0dh

回车换行

stosw

把缓冲区的开始两个字节填充成回车换行,是为了让结果和输入分别在两行上显示

mov

ah,09h

lea

dx,buffer

int

21h

MOV

AH,4CH

INT

21H

CODES

ENDS

END

START


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7867448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存