用汇编语言编写如下程序:
1。设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUNXXXXX”显示出次数。2。从键盘输入一系列以$为...
1。设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUN X X X X X”显示出次数。
2。从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
3。把0--100d之间的30个数存入以GRADE为首地址的30个数组中,GRADE+1表示学号为i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE 中的学生成绩,讲学生名次填入RANK数组中。(提示:一个学生的名次等于成绩高于这个学生是人数加1)
麻烦高手帮帮忙啊 非常感谢!!! 展开
2。从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
3。把0--100d之间的30个数存入以GRADE为首地址的30个数组中,GRADE+1表示学号为i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE 中的学生成绩,讲学生名次填入RANK数组中。(提示:一个学生的名次等于成绩高于这个学生是人数加1)
麻烦高手帮帮忙啊 非常感谢!!! 展开
2个回答
展开全部
1.
;设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUN X X X X
X”显示出次数。
DATAS SEGMENT
;此处输入数据段代码
ENG DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ$'
SUN DB 'JKL$'
DB 6 DUP (?)
TOP LABEL WORD
DB '$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
XOR AX,AX ;保存出现次数
LEA BX,ENG
CLD
L1: MOV CX,4 ;这里比SUN的长度大1位
MOV SI,BX
LEA DI,SUN
REPE CMPSB
DEC SI ;回退一个字节
JCXZ L3 ;如果比较次数用完,表示匹配
INC BX
L2: CMP BYTE PTR [BX], '$'
JNE L1
JMP SHORT L4
L3: INC AX
MOV BX,SI
JMP SHORT L2
L4: LEA SI,TOP
MOV BX,10
L5: XOR DX,DX ;转换为十进制字符
DIV BX
OR DL,30H
DEC SI
MOV [SI],DL
CMP AX,0
JNE L5
MOV AH,9
LEA DX,SUN
INT 21H
MOV DX,SI
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
2.
;*************************************
;从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,变革显示技术结果
;*************************************
STACKS SEGMENT
;此处输入堆栈段代码
DW 6 DUP (?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS
START:
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码
L1: XOR BX,BX ;BX保存非数字字符的数量
MOV AH,1
L2: INT 21H
CMP AL,'$'
JE L4 ;输入$时,输入字符串完毕,计数完毕,输出结果
CMP AL,30H
JB L3
CMP AL,39H
JNA L2 ;输入为0~9之间的数字时,进行下次输入
L3: INC BX
JMP SHORT L2;进行下次输入
L4: MOV AX,BX
MOV BX,10
L5: XOR DX,DX ;转换为十进制数字
DIV BX
OR DX,30H
PUSH DX
CMP AX,0
JNZ L5
MOV AH,2 ;输出结果
MOV DL,' ' ;分隔符
INT 21H
L6: POP DX
INT 21H
CMP SP,OFFSET TOP
JNE L6
MOV DL,' ' ;分隔符
INT 21H
JMP SHORT L1;进行下一个字符串的输入
MOV AH,4CH
INT 21H
CODES ENDS
END START
3.
DATAS SEGMENT
;此处输入数据段代码
GRADE DW 88,75,95,63,98,78,87,78,90,60;自行定义 ;成绩
COUNT EQU ($-GRADE)/2
RANK DW COUNT DUP (1) ;排名,初始值为1,大家都第一名,同一起跑线哈
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV SI,0 ;要排名的学生号码
MOV CX,COUNT
L1:
MOV AX,GRADE[SI] ;获得第SI号学生的成绩
MOV BX,RANK[SI] ;获得第SI号学生的初始排名
MOV DX,CX ;保存CX
MOV DI,0 ;要比较的学生的号码
MOV CX,COUNT
L2:
CMP AX,GRADE[DI] ;逐个比较
JNB L3
INC BX ;低于某一个学生的成绩,则排名加1
L3:
ADD DI,2
LOOP L2
MOV RANK[SI],BX ;保存排名
ADD SI,2
MOV CX,DX
LOOP L1
MOV AH,4CH
INT 21H
CODES ENDS
END START
;设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUN X X X X
X”显示出次数。
DATAS SEGMENT
;此处输入数据段代码
ENG DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ$'
SUN DB 'JKL$'
DB 6 DUP (?)
TOP LABEL WORD
DB '$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
XOR AX,AX ;保存出现次数
LEA BX,ENG
CLD
L1: MOV CX,4 ;这里比SUN的长度大1位
MOV SI,BX
LEA DI,SUN
REPE CMPSB
DEC SI ;回退一个字节
JCXZ L3 ;如果比较次数用完,表示匹配
INC BX
L2: CMP BYTE PTR [BX], '$'
JNE L1
JMP SHORT L4
L3: INC AX
MOV BX,SI
JMP SHORT L2
L4: LEA SI,TOP
MOV BX,10
L5: XOR DX,DX ;转换为十进制字符
DIV BX
OR DL,30H
DEC SI
MOV [SI],DL
CMP AX,0
JNE L5
MOV AH,9
LEA DX,SUN
INT 21H
MOV DX,SI
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
2.
;*************************************
;从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,变革显示技术结果
;*************************************
STACKS SEGMENT
;此处输入堆栈段代码
DW 6 DUP (?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS
START:
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码
L1: XOR BX,BX ;BX保存非数字字符的数量
MOV AH,1
L2: INT 21H
CMP AL,'$'
JE L4 ;输入$时,输入字符串完毕,计数完毕,输出结果
CMP AL,30H
JB L3
CMP AL,39H
JNA L2 ;输入为0~9之间的数字时,进行下次输入
L3: INC BX
JMP SHORT L2;进行下次输入
L4: MOV AX,BX
MOV BX,10
L5: XOR DX,DX ;转换为十进制数字
DIV BX
OR DX,30H
PUSH DX
CMP AX,0
JNZ L5
MOV AH,2 ;输出结果
MOV DL,' ' ;分隔符
INT 21H
L6: POP DX
INT 21H
CMP SP,OFFSET TOP
JNE L6
MOV DL,' ' ;分隔符
INT 21H
JMP SHORT L1;进行下一个字符串的输入
MOV AH,4CH
INT 21H
CODES ENDS
END START
3.
DATAS SEGMENT
;此处输入数据段代码
GRADE DW 88,75,95,63,98,78,87,78,90,60;自行定义 ;成绩
COUNT EQU ($-GRADE)/2
RANK DW COUNT DUP (1) ;排名,初始值为1,大家都第一名,同一起跑线哈
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV SI,0 ;要排名的学生号码
MOV CX,COUNT
L1:
MOV AX,GRADE[SI] ;获得第SI号学生的成绩
MOV BX,RANK[SI] ;获得第SI号学生的初始排名
MOV DX,CX ;保存CX
MOV DI,0 ;要比较的学生的号码
MOV CX,COUNT
L2:
CMP AX,GRADE[DI] ;逐个比较
JNB L3
INC BX ;低于某一个学生的成绩,则排名加1
L3:
ADD DI,2
LOOP L2
MOV RANK[SI],BX ;保存排名
ADD SI,2
MOV CX,DX
LOOP L1
MOV AH,4CH
INT 21H
CODES ENDS
END START
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询