汇编语言,求注释,越详细分越高

DATA SEGMENT
STRG DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H,46H
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H,46H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DI,16
XOR BX,BX
NEXT: LEA SI,STRG
ADD SI,BX
MOV CX,16
MOV AH,2
DISP: MOV DL,[SI]
INT 21H
MOV DL,''
INT 21H
INC SI
LOOP DISP
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
INC BX
DEC DI
JNZ NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START

DATA SEGMENT
STRG DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H  ;定义字符串'0123456789'
      DB 41H,42H,43H,44H,45H,46H                  ;定义字符串'ABCDEF'
      DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H  
      DB 41H,42H,43H,44H,45H,46H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:  MOV AX,DATA
MOV DS,AX   ;数据段地址送入ds
MOV DI,16   ;计数,16次
XOR BX,BX   ;(bx)=0,bx本程序定义为偏移量
NEXT: LEA SI,STRG  ;si指向STRG的偏移地址,本程序,=0
ADD SI,BX    ;
MOV CX,16    ;16次
MOV AH,2     ;21h中断,2号子功能,输出dl中的字符到屏幕上
DISP: MOV DL,[SI]  ;(dl)中送入[si]指定的字符,第1次循环的第1个字符,即30H,'0'
INT 21H      ;输出到屏幕
MOV DL,''    ;
INT 21H      ;输出空格
INC SI       ;si增1,指向下一个字符
LOOP DISP    ;循环16次。
MOV DL,0AH   ; 输出换行
INT 21H      ; 
MOV DL,0DH   ; 回车
INT 21H      ;
INC BX       ;BX加1,即从字符串的下一个字符开始打印。
DEC DI       ;DI减1
JNZ NEXT     ;如果DI!=0,则进行下一轮打印
MOV AH,4CH   ;退回到DOS
INT 21H      ;
CODE ENDS
END START

本程序即循环16次输出字符串,每次输出都向后移一个字符的位置。如下:

0123456789ABCDEF

123456789ABCDEF0

23456789ABCDEF01

.....

0123456789ABCDEF

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-19

可以简化一些,功能不变:

ASSUME  CS:CODE, DS:CODE
CODE   SEGMENT
    STR   DB  '0FEDCBA9876543210FEDCBA9876543210'
START:
    PUSH  CS
    POP   DS
    MOV   AH, 2
    MOV   SI, 16
NXT:MOV   BX, 16
DSP:MOV   DL, STR[SI + BX]
    INT   21H
    MOV   DL, ' '
    INT   21H
    DEC   BX
    JNZ   DSP
    MOV   DL, 0AH
    INT   21H
    MOV   DL, 0DH
    INT   21H
    DEC   SI
    JNZ   NXT
    MOV   AH, 4CH
    INT   21H
CODE   ENDS
    END   START

相似回答