求下面程序每步的说明DATA SEGMENT LIST DB 10,,10 DUP("$")X DB DATA ENDS
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/24 14:11:05
求下面程序每步的说明
DATA SEGMENT
LIST DB 10,,10 DUP("$")
X DB
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX ,DATA
MOV DS ,AX
LEA DX,LIST
MOV AH,0AH
INT 21H ; 输入字符串
MOV DL,10
MOV AH,2
INT 21H ;回车换行
MOV AH,01H
INT 21H ;输入单个字符
MOV CL,LIST+1
MOV CH,0
MOV BX,CX
ADD BX,2
MOV LIST[BX],AL
L1:MOV DL,LIST[BX-1]
CMP DL,LIST[BX]
JB EXIT
MOV AL,LIST[BX]
MOV LIST[BX],DL
MOV LIST[BX-1],AL
DEC BX
LOOP L1
EXIT:
INC LIST+2
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,10
MOV AH,2
INT 21H
LEA DX,LIST+2
MOV AH,09H
INT 21H
MOV AX ,4C00H
INT 21H
CODE ENDS
END START
DATA SEGMENT
LIST DB 10,,10 DUP("$")
X DB
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX ,DATA
MOV DS ,AX
LEA DX,LIST
MOV AH,0AH
INT 21H ; 输入字符串
MOV DL,10
MOV AH,2
INT 21H ;回车换行
MOV AH,01H
INT 21H ;输入单个字符
MOV CL,LIST+1
MOV CH,0
MOV BX,CX
ADD BX,2
MOV LIST[BX],AL
L1:MOV DL,LIST[BX-1]
CMP DL,LIST[BX]
JB EXIT
MOV AL,LIST[BX]
MOV LIST[BX],DL
MOV LIST[BX-1],AL
DEC BX
LOOP L1
EXIT:
INC LIST+2
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,10
MOV AH,2
INT 21H
LEA DX,LIST+2
MOV AH,09H
INT 21H
MOV AX ,4C00H
INT 21H
CODE ENDS
END START
DATA SEGMENT
LIST DB 10,,10 DUP("$")
X DB
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX ,DATA
MOV DS ,AX
LEA DX,LIST
MOV AH,0AH
INT 21H ; 输入字符串
;INT21H的0A功能,调用前缓冲区的第一个字节即LIST[0]是缓冲区的大小;
;定义中的10表示最多输入9个字符,因为最后一个字符总是要填那个回车(ASCII 13)
;返回时DOS会在LIST[1]里填上实际输入的字符数(但这个数不包括那个回车符,对这程序来说就是最大到9)
;实际输入的内容是从LIST[2]开始存放的
MOV DL,10
MOV AH,2
INT 21H ;换行,因为输入时最后已经有个回车了,这时只要再加个换行符(ASCII 10)即可
MOV AH,01H
INT 21H ;再输入单个字符
MOV CL,LIST+1 ;CL=LIST[1]得到的是0A调用输入的字符数
MOV CH,0 ;
MOV BX,CX ;BX=CX=实际输入的字符数(不含回车符)
ADD BX,2 ;BX加2是要跳过LIST[0]和LIST[1]这两个不是实际输入的字节
;即BX为那个输入结尾的回车符的位置(从LIST开头算的)
MOV LIST[BX],AL ;用后来输入的单个字符(在AL里)替换掉前次输入最后的回车符
L1:MOV DL,LIST[BX-1];比较[BX]和[BX-1]里字符,
CMP DL,LIST[BX] ;如果[BX]里的较大则跳出
JB EXIT
MOV AL,LIST[BX] ;否则交换这两个字符(使小的在前面)
MOV LIST[BX],DL
MOV LIST[BX-1],AL
DEC BX ;BX向前移动
LOOP L1 ;再继续循环
;这段程序有点不明所以,好像要完成的事情是:假设第一次输入的字串是从小到大预排序的,这循环把后来输入的单个字符插到合适位置
;但是又有点古怪……看不出这程序到底要干吗
EXIT:
INC LIST+2 ;把实际输入的字串的第一个字符(在LIST[2]里)加1
MOV DL,0DH ;回车
MOV AH,2
INT 21H
MOV DL,10 ;换行
MOV AH,2
INT 21H
LEA DX,LIST+2 ;把处理完的字符串显示出来
MOV AH,09H ;注意:09号功能要求字串以美元符结尾,程序没给字串填上结尾的$,所以实际输出会多了很多乱码
INT 21H
MOV AX ,4C00H ;退出
INT 21H
CODE ENDS
END START
LIST DB 10,,10 DUP("$")
X DB
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX ,DATA
MOV DS ,AX
LEA DX,LIST
MOV AH,0AH
INT 21H ; 输入字符串
;INT21H的0A功能,调用前缓冲区的第一个字节即LIST[0]是缓冲区的大小;
;定义中的10表示最多输入9个字符,因为最后一个字符总是要填那个回车(ASCII 13)
;返回时DOS会在LIST[1]里填上实际输入的字符数(但这个数不包括那个回车符,对这程序来说就是最大到9)
;实际输入的内容是从LIST[2]开始存放的
MOV DL,10
MOV AH,2
INT 21H ;换行,因为输入时最后已经有个回车了,这时只要再加个换行符(ASCII 10)即可
MOV AH,01H
INT 21H ;再输入单个字符
MOV CL,LIST+1 ;CL=LIST[1]得到的是0A调用输入的字符数
MOV CH,0 ;
MOV BX,CX ;BX=CX=实际输入的字符数(不含回车符)
ADD BX,2 ;BX加2是要跳过LIST[0]和LIST[1]这两个不是实际输入的字节
;即BX为那个输入结尾的回车符的位置(从LIST开头算的)
MOV LIST[BX],AL ;用后来输入的单个字符(在AL里)替换掉前次输入最后的回车符
L1:MOV DL,LIST[BX-1];比较[BX]和[BX-1]里字符,
CMP DL,LIST[BX] ;如果[BX]里的较大则跳出
JB EXIT
MOV AL,LIST[BX] ;否则交换这两个字符(使小的在前面)
MOV LIST[BX],DL
MOV LIST[BX-1],AL
DEC BX ;BX向前移动
LOOP L1 ;再继续循环
;这段程序有点不明所以,好像要完成的事情是:假设第一次输入的字串是从小到大预排序的,这循环把后来输入的单个字符插到合适位置
;但是又有点古怪……看不出这程序到底要干吗
EXIT:
INC LIST+2 ;把实际输入的字串的第一个字符(在LIST[2]里)加1
MOV DL,0DH ;回车
MOV AH,2
INT 21H
MOV DL,10 ;换行
MOV AH,2
INT 21H
LEA DX,LIST+2 ;把处理完的字符串显示出来
MOV AH,09H ;注意:09号功能要求字串以美元符结尾,程序没给字串填上结尾的$,所以实际输出会多了很多乱码
INT 21H
MOV AX ,4C00H ;退出
INT 21H
CODE ENDS
END START
求下面程序每步的说明DATA SEGMENT LIST DB 10,,10 DUP("$")X DB DATA ENDS
求分析汇编程序功能…… DATA SEGMENT DA1 DB 10 DUP(2,3) DA2 DW 10 DUP(02
DATA SEGMENT X DB 3DUP(2,1,4DUP(1,0)) Y DD 6DUP(?) W EQU $-X
DATA SEGMENT A DB -1,3,2,-2 B DW 5,2,1 DATA ENDS ... LEA BX.
有一道微机原理的题,已知程序的数据段为:DATA SEGMENTA DB 'A',10HB DB 'COMPUTER'C
DATA SEGEMENT D1 dB 5 7 4 3 2 D2 db 6 5 9 7 3 S1 dB 6 Dup(?)
10.DATA DB 3 DUP(4),01H,05H,试判断LENGTH DATA的运算结果( ) A、1 B、3 C
求汇编语句的含义DATA SEGMENTBUF DB -1,-3,5,6,9.CUNT EQU $ - BUFRESUL
求 X db 4 dup(2 dup(2)),,'$' 中总共分配多少内存单元?‘$‘ 符号的作用是什么?
已知数据段定义如下: DATA SEGMENT ORG 512H VRA DW 9 VRB DB ‘BYTE’,0AH,
汇编语言中data segment和dseg segment ,data segment的区别和用法
用keil写程序时出现“C(162):error C249:'DATA':SEGMENT TOO LARGE“的错误,