北理工汇编语言实验报告4

上传人:豆浆 文档编号:10658431 上传时间:2017-10-09 格式:DOCX 页数:8 大小:274.53KB
返回 下载 相关 举报
北理工汇编语言实验报告4_第1页
第1页 / 共8页
北理工汇编语言实验报告4_第2页
第2页 / 共8页
北理工汇编语言实验报告4_第3页
第3页 / 共8页
北理工汇编语言实验报告4_第4页
第4页 / 共8页
北理工汇编语言实验报告4_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《北理工汇编语言实验报告4》由会员分享,可在线阅读,更多相关《北理工汇编语言实验报告4(8页珍藏版)》请在金锄头文库上搜索。

1、实验四 分支和循环程序设计实验(设计性实验)一、实验要求和目的1熟悉汇编语言程序设计结构;2熟悉汇编语言分支程序基本指令的使用方法;3掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4了解汇编语言循环程序设计的基本流程;5熟悉汇编语言循环基本指令的使用方法;6掌握利用汇编语言的循环指令完成循环程序设计方法。二、实验内容与步骤1、判断方程AX2+BX+C=0 是否有实根。若有实根,则将字节变量 tag 置1,否则置0。假设A、B、C 均为字节变量,数据范围为-128127。源代码如下:DATAS SEGMENTa dw 2b dw 8d dw 5tag db ?;此处输入数据段代码 D

2、ATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX mov cx,bmov ax,0l1: add ax,bloop l1mov cx,dmov dx,0l2:add dx,aloop l2mov cx,4add bx,dxcmp ax,bxjge existmov tag,0jmp doneexist: mov tag,1 ;此处输入代码段代码done:MOV AH,4CH INT 21HCODES ENDSEND START结果如下:b=8,a=2,c=5,因为8*8-4*2

3、*5=240所以应该有解,tag为1运行后,Dds:0显示的数据第一排一次为2、8、5、1,前面三个是a、b、c的值,第四个是tag的值,值为1,符合题目要求若改一改数据,将b改成2,结果应该为0这里的tag果然为0,也符合题目要求。 2、编写一个程序,判别键盘上输入的字符;若是1-9 字符,则显示之;若为A-Z 字符,显示“C”;若为a-z 字符,显示“c ”;若是回车字符(其ASCII 码为0DH),则结束程序,若为其它字符则显示显示“R”。源代码如下:DATAS SEGMENTchar db ? ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码S

4、TACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX l: mov ah,1int 21hmov char,alcmp char,0dhje end1cmp char,1;判断输入数是否比0大jge next1jmp othersnext1:cmp char,9;判断是否比9大jle show1;不是的话,即在09之间,跳至show1cmp char,A;比9大后判断是否比41(A)大jge next2jmp test1;不比40大,去检测是否是回车next2: cmp char

5、,Z;比40大后,判断是否比5a(Z)大jle show2;不比5a(Z)大,即在AZ之间,跳至show2cmp char,a;判断是否比61(a)大jge next3;若大,跳至next3jmp othersnext3:cmp char,z;检测是否比7a(z)大jle show3;不比7a(z)大,即在az之间跳至show3jmp otherstest1: cmp char,0dhje end1jmp othersshow1: mov dl,charmov ah,02hint 21hjmp doneshow2: mov dl,Cmov ah,02hint 21hjmp doneshow3:

6、 mov dl,c mov ah,02hint 21hjmp doneothers:mov dl,Rmov ah,02hint 21hjmp donedone:loop l;输完一个字符之后,会立刻显示对应字符,此后可以继续输入字符。end1:;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:例如输入3,则立刻显示3(09显示原字符,输入),输入e之后显示c(小写字母都显示c),输入S之后显示C(大写字母显示C),输入之后显示R(其他字符统一显示R),如果按回车,则退出循环,如下3、(大家再次编成实现实验一的题目,看是否可以优化程序?)分

7、类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。使用Debug 查看Positive、Negative 和Zero 三个变量的数据。源代码如下:DATAS SEGMENTdata1 dw 1,-2,-3,7,4,0,5count equ ( $-data1)/2positive dw count+1 dup(?)negetive dw count+1 dup(?)zero dw count+1 dup(?);此处输入数据段代码 DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代

8、码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov dx,0mov bx,0mov di,0mov si,0mov cx,count ll: mov ax,data1sicmp ax,0jg pje zjl np:mov ax,data1simov positivesi+2,axinc dxadd si,2jmp lz: mov ax,data1simov zerosi+2,axinc bxadd si,2jmp ln: mov ax,data1simov neget

9、ivesi+2,axinc diadd si,2jmp ll: loop llmov positive0,dxmov zero0,bxmov negetive0,di;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:-dds:0里面显示的前面7个数为data1里面的,紧接着7个数是positive4、编写程序,在字符串变量STRING 中存有一个以$为结尾的ASCII 码字符串,要求计算字符串的长度,并把它存入LENGTH 单元中。(要求用条件控制循环方法,并且字符串分数据类型是字节和字两种情况)情况1(字节)源代码:DATAS SEGM

10、ENTstring db 13211$length1 db ?;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov al,0mov si,0count: cmp stringsi,$je doneinc siinc aljmp countdone:mov length1,almov dl,almov ah,02hint 21h;此处输入代码段代码MOV AH,4CHINT 21HCO

11、DES ENDSEND START运行结果为:-dds:0中数据的第一行前面几个数是string,$的ASCII码是24,之后的一个数据就是string中字节的个数,这里显示为5个(不含$本身)情况2(字)源代码:DATAS SEGMENTstring dw 1,3,2,1,1,$length1 db ?;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov al,0mov si,0count: cmp stringsi,$je doneinc siinc siinc aljmp countdone:mov length1,almov dl,almov ah,02h int 21h;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:前面的几个数据是string的数据,最后一个数0005是string中元素的个数,5个(这里依旧把$算作其内)。注意:涉及到初始数据的,同学们自行给出多组数据,反复加以验证各题程序。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号