注册 登录
编程论坛 汇编论坛

这道题怎么解啊?

whbc 发布于 2010-10-19 13:17, 484 次点击
设在数据段中有一个长度为10的字符串,请编写一段程序将该字符串颠倒过来存储到附加段中!
程序代码:
SEG SEGMENT
  VAR1 DB "ASDFGHJKLQ"
DSEG ENDS
EXTRA1 SEGMENT
  VAR2 DB 10 DUP (?)
EXTRA1 ENDS
CSEG SEGMENT

 ASSUME CS:CSEG,DS:DSEG,ES:EXTRA1

 START:

 MOV AX,DSEG

 MOV DS,AX

 MOV AX,EXTRA1

 MOV ES,AX

 LEA SI,VAR1+9           ;将SI指向变量VAR1的最后那个字符
LEA DI,VAR2
NEXT:

 LODSB

 DEC SI                  ;将SI减一指向另一个字符
STOSB

 INC DI                  ;将DI加一,指向附加段的高字节
CMP BYTE PTR [SI],00H   ;比较接下来的字符是否是00h.
JNZ NEXT                ;不行的的话就跳转到next
MOV AH,4CH

 INT 21H
CSEG ENDS
END START

大家看看吧,我这里只有存到一个字符Q到了附加段中,大家帮忙看看!!
2 回复
#2
xiaomarn2010-10-19 18:13
DATA SEGMENT
    VAR1 DB 'ABCDEFGHIJ',0
DATA ENDS

EXTRA SEGMENT
    VAR2 DB 10 DUP(?)
EXTRA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
   
    MOV AX,EXTRA
    MOV ES,AX
   
    CLD
    MOV SI,OFFSET VAR1
    XOR CX,CX
GETTAIL:
    LODSB            ;获取字串长度和指向字串尾
    OR AL,AL
    JZ LOP
    INC CX
    JMP GETTAIL

LOP:
    STD
    DEC SI
    DEC SI            ;指向字串尾
    MOV DI,OFFSET VAR2    ;指向要转移区
LOP2:
    LODSB
    MOV ES:[DI],AL        ;转移数据
    INC DI
    LOOP LOP2
   
    MOV AH,4CH
    INT 21H
CODE ENDS
    END START
#3
玩出来的代码2010-10-19 21:40
楼主应该去熟悉下指令的用法。看lodsb,stosb就知道错在哪了。
1