当前位置:文档之家› 汇编实验报告52352019

汇编实验报告52352019

(此文档为word格式,下载后您可任意编辑修改!)实验三循环程序设计一、预习内容1.多重循环程序和排序程序设计方法。

2.带符号数的比较转移指令:JL,JLE,JG,JGE二、目的要求1.掌握多重循环程序和排序程序设计方法。

2.掌握带符号数的比较转移指令:JL,JLE,JG,JGE三、实验内容建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中grade+i 保存学号为i+1的学生的成绩。

要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank数组中,其中rank+i的内容是学号为i+1学生的名次(提示:一个学生的名次等于成绩高于该学生的人数加1).四、程序流程图五、程序DSEG SEGMENTgrade dw 90,60rank dw 10 dup(?) DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG start: mov ax, dsegmov ds, axmov di,10mov bx,0lea bp,rankl: lea si,grademov dx,1mov cx,10mov ax,[si+bx] next: cmp ax,[si]jge no_countinc dxno_count: add si,2loop nextmov [bp],dxadd bp,2add bx,2dec disub di,0jne lmov ax, 4c00hint 21hCSEG ENDSend start六、实验结果JGE情况下的排序结果转移指令为JG 时的排序结果:转移指令为JL时的排序结果:转移指令为JLE 时的排序结果:实验四分支程序设计一、预习内容1.分支程序设计方法。

2.利用转移指令jl、jmp实现多岔分支的方法。

二、目的要求1.掌握分支程序设计方法。

2.掌握利用转移指令jl、jmp实现多岔分支的方法。

三、实验内容统计学生成绩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单元中四、实验程序DSEG SEGMENTgrade dw 100,80s5 dw 0s6 dw 0s7 dw 0s8 dw 0s9 dw 0s10 dw 0DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEGstart: mov ax, dsegmov ds, axmov cx,10mov bx,offset gradecompare:mov ax, [bx]cmp ax,60jl fivecmp ax,70jl sixcmp ax,80jl sevencmp ax,90jl eightcmp ax,100jne nineinc s10jmp short change_addrnine:inc s9jmp short change_addreight:inc s8jmp short change_addrseven:inc s7jmp short change_addrsix:inc s6jmp short change_addrfive:inc s5change_addr:add bx,2loop comparemov ax, 4c00hint 21hCSEG ENDSend start每次执行转移指令时寄存器cs ip的值最终运行结果五、程序流程图实验五子程序设计一、预习内容1.子程序调用方法和参数传递方式。

2.过程调用伪指令: PROC,ENDP和NEAR。

3.子程序调用中堆栈的用法。

4.简化格式程序设计方法。

二、目的要求1.掌握子程序调用方法和参数传递方式。

2.掌握过程调用伪指令: PROC,ENDP和NEAR。

3.理解子程序调用中堆栈的用法。

4.熟悉简化格式程序设计方法。

三、实验内容显示学生名次表rank。

要求接收从键盘输入的一个班的学生成绩,并存放于10字的grade数组中,其中grade+i保存学号为i+1的学生的成绩。

然后根据grade中的学生成绩,把学生名次填入10字的rank数组中,其中rank+i的内容是学号为i+1学生的名次。

再按学号把名次从终端显示出来。

四、流程图1、Input2、output3、rankp五、实验程序.model small.stack.datagrade dw 10 dup(?)rank dw 10 dup(?)count dw ?mess1 db 'Grade?','$'mess2 db 13,10,'Iput Error!''$' mess3 db 'Rank:','$'.codemain proc farstart : mov ax, @datamov ds, axcall inputcall rankpcall outputmov ah,1int 21hmov ax, 4c00hint 21hmain endpinput proc nearmov dx,offset mess1mov ah,09int 21hmov si,0mov count,0enter:call decibininc countcmp dl,','je storecmp dl,13 ;is it 'return'?je exit2jne errorstore:mov grade[si],bxadd si,2jmp entererror:lea dx,mess2mov ah,09int 21hmov grade[si],bxcall crlfretinput endprankp proc nearmov di,countmov bx,0loop1:mov ax,grade[bx]mov word ptr rank[bx],0mov cx,countlea si,gradenext:cmp ax,[si]jg no_countinc word ptr rank[bx] no_count:add si,2loop nextadd bx,2dec dijne loop1retrankp endpoutput proc nearlea dx,mess3mov ah,09int 21hmov si,0mov di,countnext1:mov bx,rank[si]call binidecmov dl,','mov ah,02int 21hadd si,2jnz next1call crlfretoutput endp decibin proc near s:mov ah,1int 21hcmp al,30hja ba1mov al,8hmov dl,almov ah,2int 21hjmp sba1:cmp al,39hjb ba2mov al,8hmov dl,almov ah,2int 21hjmp sba2:sub al,30hmov bl,10mul blmov bl,als1:mov ah,1int 21hcmp al,30hja ba11mov al,8hmov dl,almov ah,2int 21hjmp s1ba11:cmp al,39hjb ba21mov al,8hmov ah,2int 21hjmp s1ba21:sub al,30h add bl,almov ah,1int 21hmov dl,alretdecibin endp binidec proc near push bxpush cxpush sipush dimov cx,100d call dec_div mov cx,10dcall dec_div mov cx,1call dec_divpop dipop sipop cxpop bxretbinidec endpdec_div proc nearmov ax,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,02hretdec_div endpcrlf proc nearmov dl,0dhmov ah,02hint 21hmov al,10mov dl,almov ah,2int 21hretcrlf endpend main实验结果观察call input,call rankp,call output三条指令后sp,bp以及[sp]的值InputRankOutput实验六综合程序设计一、预习内容1. DOS中断,字符输入输出的方法.2.综合程序设计方法二、目的要求1.熟悉DOS中断,掌握字符输入输出的方法.2.继续熟悉基本程序设计方法,包括循环程序设计,分支程序设计和子程序设计等.3.练习综合程序设计方法三、实验内容数据区存放有10个正数,要求自己编写一个完整的程序实现这10个数的排序,具体要求如下:1.显示未排序的10个数据;2.提示输入排序方法,是按从大到小还是从小到大;3.从键盘输入‘H’或者‘L’决定数据是按从大到小还是从小到大的顺序排列,如果从键盘输入‘H’,则按从大到小顺序排列,如果输入‘L’,则按从小到大顺序排列,否则提示输入错误,请重新输入;4.显示最后的排序结果。

四、实验步骤1.认真阅读实验要求,编写源程序;2.编译,链接,生成可执行文件,记录编译过程中的错误,并分析原因;3.编译通过后,调式程序,直至得到正确的结果。

五、程序流程图六、实验程序DSEG SEGMENTstring1 db 'small to large press L,large to small press H','$'string2 db 'input error,try it again','$'mess1 dw 90,80co dw 10mess2 dw 10 dup(?)DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG, es:DSEG start: mov ax, dsegmov ds, axmov es, axmov cx,10call shlea bx,mess1lea bp,mess1lea dx,string1jmp inputlop:lea dx,string2input:mov ah,9int 21hmov al,13mov dl,almov ah,2int 21hMOV AL,10mov dl,almov ah,2int 21hmov ah,1int 21hcmp al,48hje pahcmp al,4chjne loplea bx,mess1lea si,mess1pal:mov cx,comov ax,[bx]mov si,bxll:cmp ax,[si] jb nextlxchg ax,[si]nextl:add si,2loop llmov [bx],ax add bx,2 ADD SI,2dec comov cx,coadd cx,1loop palJMP KKmov ax,10mov co,axpah:mov cx,comov ax,[bx] mov si,bxhh:cmp ax,[si] ja nexthxchg ax,[si] nexth:add si,2loop hhmov [bx],ax add bx,2dec comov cx,coadd cx,1loop pahKK:mov al,10mov dl,almov ah,2int 21hmov al,13mov dl,almov ah,2int 21hmov al,10mov dl,almov ah,2int 21hMOV AH,1INT 21Hmov ax,4c00h int 21hsh proc nearlea bx,mess1 mov cx,10 show:mov ax,[bx] mov dl,10div dladd al,30hmov dl,almov al,ahpush cxpush axmov ah,2int 21hpop axadd al,30hmov dl,almov ah,2int 21hmov dl,','mov ah,2int 21hadd bx,2loop showretsh endpCSEG ENDSend start实验结果。

相关主题