答:程序如下: DSEG SEGMENT
GRADE DW 30 DUP (?) ;假设已预先存好30名学生的成绩 RANK DW 30 DUP (?) DSEG ENDS
;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX
MOV AX, DSEG
MOV DS, AX ;给DS赋值 BEGIN: MOV DI, 0
MOV CX, 30 ;外循环计数器 LOOP1: PUSH CX
MOV CX, 30 ;内循环计数器 MOV SI, 0
MOV AX, GRADE [DI]
MOV DX, 1 ;起始名次为第1名
LOOP2: CMP GRADE [SI], AX ;成绩比较 JBE GO_ON
INC DX ;名次+1 GO_ON: ADD SI, 2 LOOP LOOP2 POP CX
MOV RNAK [DI], DX ;名次存入RANK数组 ADD DI, 2 LOOP LOOP1 RET
MAIN ENDP
CSEG ENDS ;以上定义代码段
;-------------------------------------------------------------------------- END START
实验一:
一、实验内容 比较字符串:
试编写一程序:比较两个字符串String1和String2所含的字符是否相同。若相同则显示‘Match',否则,显示'No Match!' data segment
6 / 16
string1 db 'Move the cursor backward.' string2 db 'Move the Sursor backward.' mess1 db 'Match.',13,10,'$' mess2 db 'No match!',13,10,'$' data ends
program segment main proc far assume cs:program,ds:data,es:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax lea si,string1 lea di,string2 cld mov cx,25 repz cmpsb jz match lea dx,mess2 jmp short disp
match: lea dx,mess1 disp: mov ah,9 int 21h ret
main endp
program ends end start
实验三:分支程序设计
7 / 16
实验内容
统计学生成绩result:
试编写一程序:设有10个学生的成绩分别为56,69,84,82,73,88,99,63,100,80分。试编写程序分别统计低于60分、60~69分,70~79分,80~89分,90~99分及100分的人数,并分别存放到s5,s6,s7,s8,s9,s10单元中。
(提示:成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。)
DATAS SEGMENT GRADE DW 56,69,84,82,73,88,99,63,100,80 S5 DW 0 S6 DW 0 S7 DW 0 S8 DW 0 S9 DW 0 S10 DW 0 ;此处输入数据段代码 DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
;此处输入代码段代码 MOV CX,10 MOV BX,OFFSET GRADE COMPARE: MOV AX,[BX] CMP AX,60 JL FIVE CMP AX,70 JL SIX CMP AX,80 JL SEVEN CMP AX,90 JL EIGHT CMP AX,100 JL NINE INC S10 JMP SHORT CHANGE_ADDR NINE:
8 / 16
EIGHT:
SEVEN: SIX:
FIVE:
CHANGE_ADDR:
MOV AH,4CH INT 21H CODES ENDS
END START
INC S9
JMP SHORT CHANGE_ADDR INC S8
JMP SHORT CHANGE_ADDR INC S7
JMP SHORT CHANGE_ADDR INC S6
JMP SHORT CHANGE_ADDR INC S5 ADD BX,2
LOOP COMPARE
6.3 分析下面的程序,画出堆栈最满时各单元的地址及内容。 ;******************************************** S_SEG SEGMENT AT 1000H ;定义堆栈段 DW 200 DUP (?) ;200*2=190H TOS LABEL WORD S_SEG ENDS
;******************************************** C_SEG SEGMENT ;定义代码段 ASSUME CS: C_SEG, SS: S_SEG
START: MOV AX, S_SEG
MOV SS, AX
9 / 16
MOV SP, OFFSET TOS PUSH DS MOV AX, 0 PUSH AX ┇
PUSH T_ADDR PUSH AX PUSHF ┇ POPF POP AX POP T_ADDR RET
;-------------------------------------------------------------------------- C_SEG ENDS ;代码段结束
;****************************************** END START ;程序结束
1000:0186 1000:0188 1000:018A 1000:018C 1000:018E SP: 10 / 16
(FLAGS) (AX) (t_addr) 0000 (DS) 0186
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编考试重点20题 docx(2)在线全文阅读。
相关推荐: