回 帖 发 新 帖 刷新版面

主题:我写的一个汇编程序,有些问题,希望高手指点一下!

该程序是实现将用户输入的字符串中的'a'转换成'A',该程序利用一个循环实现字符串的查找改写功能,程序通过调用中断实现了要求清屏,设置光标位置,要求用户输入,打印输出功能,但编译连接后,我输入as没有反映,当我输入很长一串字符时准确打印,希望高手帮忙看看是怎么回事,可通过qq或者邮箱联系我,谢了!
程序代码如下:
        TITLE  CHANGE 'a' TO 'A'
.286
;堆栈定义
      STACKS  SEGMENT   STACK
              DB        32 DUP(?)
      STACKS  ENDS
;数据段定义,定义输入表
       DATAS  SEGMENT
   PARA_LIST  LABEL     BYTE
      MAXLEN  DB        20
       ACLEN  DB        ?
    DATATEST  DB        20 DUP(?),0DH,0AH,'$'
       DATAS  ENDS
;代码段
       CODES  SEGMENT
              ASSUME    CS:CODES,DS:DATAS,SS:STACKS
;定义子过程
;输出中断过程
      OUTPUT  PROC      NEAR
              PUSHA
              MOV       AH,9
              INT       21H
              POPA
              RET
      OUTPUT  ENDP
;清屏中断过程
       CLEAR  PROC      NEAR
              PUSHA
              MOV       AH,02H
              MOV       BH,00
              MOV       DX,080AH
              INT       10H
              POPA
              RET
       CLEAR  ENDP
;设置页面属性
      CURSOR  PROC      NEAR
              PUSHA
              MOV       AX,0600H
              MOV       BH,61H
              MOV       CX,0000
              MOV       DX,184FH
              INT       10H
              POPA
              RET
      CURSOR  ENDP
;退出中断设置
        EXIT  PROC      NEAR
              PUSHA
              MOV       AH,4CH
              INT       21H
              POPA
              RET
        EXIT  ENDP
;输入中断过程
       INPUT  PROC      NEAR
              PUSHA
              MOV       AH,0AH
              INT       21H
              POPA
              RET
       INPUT  ENDP
;子过程定义结束
;主过程
      BEGIN:
              MOV       AX,DATAS
              MOV       DS,AX
              LEA       DX,PARA_LIST
              CALL      INPUT
              XOR       CX,CX
              MOV       CL,ACLEN
              MOV       BX,OFFSET MAXLEN
;逐字符比较,将'a'转换成'A'
          S:
              CMP       BYTE PTR[BX+2],61H
              JNE       Z
              MOV       BYTE PTR[BX+2],41H
          Z:
              INC       BX
              LOOP      S
              CALL      CLEAR
              CALL      CURSOR
              LEA       DX,DATATEST
              INC       DX
              CALL      OUTPUT
              CALL      EXIT
       CODES  ENDS
              END       BEGIN
;程序结束

回复列表 (共3个回复)

沙发

我给你一段COM把
.386
code segment use16
assume cs:code,ds:code
org 100h
start:jmp begin
abc db 81 dup(0)
begin:mov ah,3fh
mov bx,0
mov cx,80
lea dx,abc
int 21h
push ax
lea si,abc
abcde:lodsb
cmp al,'a'
jl defg
cmp al,'z'
jg defg
mov di,si
dec di
sub al,'a'-'A'
stosb
defg:cmp al,0dh
jnz abcde
pop ax
mov bx,1
mov cx,ax
lea dx,abc
mov ah,40h
int 21h
ret
code ends
end start
技术很差请高手门不要那个。。。

板凳

怎么就只有楼上一位兄台回复啊?大家都来看一下呗

3 楼

就没高手来看看吗

我来回复

您尚未登录,请登录后再回复。点此登录或注册