华南农业大学汇编语言8086习题(附答案)_第1页
华南农业大学汇编语言8086习题(附答案)_第2页
华南农业大学汇编语言8086习题(附答案)_第3页
华南农业大学汇编语言8086习题(附答案)_第4页
华南农业大学汇编语言8086习题(附答案)_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目名称 实验一 汇编语言程序结构题目关键字 源程序结构debug题目录入时 间2013-3-13 22:45:26一、实验目的.掌握汇编语言程序上机过程。.掌握汇编语言结构。. 了解汇编程序、连接程序、DOS系统装入和返回功能。.掌握用DEBUG调试汇编语言程序的方法二、实验要求.编写完整的汇编语言程序:(1)逆序输出字符串“ BASED ADDRESSING。(2)从键盘上输入2个一位的正数,求出它们的和(假设和不超过1 位)。(3)试编写一段程序,要求在长度为100H字节的数组中,找出大于42H 的无符号数的个数并存入字单元UP中;找出小于42H的无符号数的 题目内容 个数并存入字单元D

2、OWN中。.在DEBUG下查看程序执行的过程,以及变量值的变化。.演示程序运行结果,请指导教师检查。三、思考.汇编语言程序中语句 END后的标号作用是什么?.采用标准序结构编制源程序,用ret结束程序运行返回操作系 统时,可否将语句main proc far 中的far属性去掉,为什么?.一个段的大小为多少? 一定是64KB吗?如何在DEBUG下查看程 序在内存的存放情况? 四、提交内容将各个源程序代码、exe文件压缩为RAR后提交到作业系 统。题目创建人 题目注释asmDATAS SEGMENTString db BASED ADDRESSINGcount dw $-StringDATAS

3、ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov cx,count ;循环次数lea si,count-1;将最后一个字符G的地址给siL:mov ah,2mov dl,sidec siint 21hloop LMOV AH,4CHINT 21HCODES ENDSEND STARTasmDATAS SEGMENTx db x=$y db y=$z db x+y=$DATAS ENDSSTACKS SEGMENTSTACKS EN

4、DSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ah,9 ;显示 x=lea dx,xint 21hmov ah,1 ;输入 Xint 21hsub al,30hmov cl,al ;将 X 放在 CLmov ah,9 ;显示 y=lea dx,yint 21hmov ah,1 ;输入 Yint 21hsub al,30hadd cl,al;两数字相加mov ah,9 ;显示 z=lea dx,zint 21hmov ah,2 ;显示结果mov dl,cladd dl,30hint

5、 21hMOV AH,4CHINT 21HCODES ENDSEND STARTasmDATAS SEGMENTarray db 128 dup(41h,43h)up dw 0down dw 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea di,arraymov cx,256mov al,dicmp al,42hjl L1ja L2inc downjmp L3L2:inc upjmp L3L3:inc diloop

6、 LMOV AH,4CHINT 21HCODES ENDSEND START题目名称 实验二 程序结构与简单程序设计题目关键字简单程序设计题目录入时 间2013-4-1 22:45:55实验目的.掌握汇编语言源程序结构。题目内容.掌握汇编语言调试方法。二、实验要求写完整的汇编语言程序: 试编写一段程序,要求对键盘输入的小写字母用大写字母显 示出来。编写程序,从键盘接收一个小写字母,然后找出它的前导字 母和后续字母,再按顺序显示这三个字符。试编写一段程序,要求比较两个字符串stringl 和string2 所含字符是否相等,如相等则显示“ MATCH ,若不相同则显示“ NO MATCH.编写程

7、序,将一个包含有20个数据的数组M分成2个数组:正 数数组P和负数数组N,并分别把这两个数组中数据的个数显示出 来。.在DEBUG下查看程序执行的过程,以及变量值的变化。.演示程序运行结果,请指导教师检查。三、思考对输入的非字母字符如何处理?.字母“a”和“ z”边界字符的处理方法是什么?. 显示结果为多位数的时候如何输出?四、提交内容将各个源程序代码、exe文件,思考题的 WORD文档压缩为RAR后提 交到作业系统。题目创建人 题目注释asmDATAS SEGMENTcrlf db 0ah,0dh,$DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGME

8、NTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ah,1;输入数据会ALint 21hpush ax;将 AX 存进栈里lea dx,crlf ; 换行mov ah,9int 21hpop dx;栈里数据放进DX ,即将原先AX 放进 DXsub dl,20h ;小写变大写要减去20hmov ah,2;输出int 21hMOV AH,4CHINT 21HCODES ENDSEND STARTasmDATAS SEGMENTString db zabcdefghijklmnopqrstuvwxyzaDATAS

9、 ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea di,Stringmov ah,1;输入字母int 21hL:inc di ;先DI自加1,第一次就是a的地址,不是 cmp al,di ;直到找到字母和输入的相匹配jnz Ldec di ; 推前成为前端字母的地址mov cx,3;循环次数 3L2:mov dl,diinc dimov ah,2int 21hloop L2MOV AH,4CHINT 21HCODES ENDSE

10、ND STARTasmDATAS SEGMENTString1 db this is a programcount1 dw $-String1String2 db this is a programcount2 dw $-String2answer1 db match,$answer2 db no match,$DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ax,count1mov bx,count2cmp ax,

11、bx;比较两个字符串的长度,如果不等就是不匹配jnz nextmov cx,count1;字符串长度lea si,string1lea di,string2L:mov al,sicmp al,di; 比较两个字符串的字符,如果不等就跳jnz nextinc siinc diloop Llea dx,answer1 ;能到这里说明都匹配mov ah,9int 21hjmp finally;跳去finally, 避免顺序执行了 nextnext:;显示不匹配lea dx,answer2mov ah,9int 21hfinally:MOV AH,4CHINT 21HCODES ENDSEND STA

12、RTasmDATAS SEGMENTM db 5 dup(-1,1,2,3)P dw 0N dw 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea si,Mmov cx,20;循环次数mov al,sicmp al,0 ;和 0 比较判断正负jl L1jg L2inc Njmp L3L2:inc Pjmp L3L3:inc siloop Lmov ax,P;输出Pmov bl,10;设置除数 10div blmov

13、bh,ah;将ah(余数放在 bh保留)mov dl,al ;将商显示add dl,30hmov ah,2int 21hmov dl,bh ;将余数显示add dl,30hmov ah,2int 21hmov ax,N;输出Nmov bl,10div blmov bh,ahmov dl,aladd dl,30hmov ah,2int 21hmov dl,bhadd dl,30hmov ah,2int 21hMOV AH,4CHINT 21HCODES ENDSEND START题目名称 实验三 分支程序设计题目关键字分支结构题目录入时 间2013-4-14 20:14:57实验目的.掌握汇编语

14、言源程序结构。.掌握汇编语言分支结构程序设计方法。二、实验要求.编写完整的汇编语言程序:试编写一段程序,求出首地址为DATA的100D字数组中的最小 偶数,并把它存放在AX中。编写一段程序,从键盘接收一个四位的十六进制数,并在终端 上显示与它等值的二进制数。键盘上输入一系列以$为结束符的字符串,然后对其中的非数字 字符计数,并显示计数结果。题目内容 (4) 有一个首地址为mem的100个字的数组,试编制程序删除数组中 所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上 零。.在DEBUG下查看程序执行的过程,以及变量值的变化。.演示程序运行结果,请指导教师检查。三、思考.求极值时程序初

15、始化应该注意什么?.如何从键盘上输入多位数?.第(4)小题有多少种做法?四、提交内容将各个源程序代码、exe文件以及思考题压缩为RAR后提交到作业系 统。提交时请填写自评内容。题目创建人 题目注释asmDATAS SEGMENTDATA dw 1 dup(1,2,-1,4,-2,-6)count dw ($-DA TA)/2DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov cx,countlea si,DATA-2L1

16、:add si,2 mov ax,si dec cxtest al,01h jnz L1; 将第一个偶数存在AXL2:add si,2 mov bx,si cmp cx,0 jz L4 dec cx test bl,01h jnz L2;找到另外一个偶数cmp ax,bxjg L3jmp L2;比较两个偶数,如果axbx 那么跳到 L3L3:mov ax,bxjmp L2L4:MOV AH,4CHINT 21HCODES ENDSmov cx,16END STARTasmDATAS SEGMENTNUM dw 0crlf db 0dh,0ah,$DATAS ENDSSTACKS SEGMENT

17、STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov dx,0mov cx,4:mov ah,1int 21hcmp al,40hjg L1jl L21:sub al,07h;大写字母多减7L2:sub al,30h;变成实际数字push ax; 原来数字 *16+ 新接受数字mov ax,NUMmov bx,16mul bxpop bxadc al,blmov NUM,axloop L;循环 4 次lea dx,crlfmov ah,9int 21hmov bx,NU

18、ML3:mov dl,31hsal bx,1;左移 1 位,改变 CFjc L4sub dl,1;CF 为 0,所以DL 减去 1 ,变成 0L4:mov ah,2int 21hloop L3MOV AH,4CHINT 21HCODES ENDSEND START3.3.asmDATAS SEGMENTString db 128,?,128 dup($)crlf db 0dh,0ah,24hcount dw 0num dw 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSST

19、ART:MOV AX,DATASMOV DS,AXlea dx,String ;吸收字符串mov ah,0ahint 21hlea dx,crlf ;换行mov ah,9int 21hlea si,String+1 ;cx 存放着字符串个数mov cl,simov ch,0lea di,String+2 ;从实际字符串开始L1:mov al,diinc dicmp al,30hjl L2cmp al,39hjg L2dec num;如果是数字,先减 num后加num,将其抵消L2:inc numloop L1mov cx,0 mov ax,numL3:;余数放栈,检测商是否为0,为0 就退出m

20、ov bl,10 div bl push ax inc cx;记录余数个数mov ah,0 cmp al,0 jnz L3L4:;将余数输出pop dx mov dl,dh add dl,30h mov ah,2 int 21h loop L4MOV AH,4CH INT 21HCODES ENDSEND STARTMOV AH,4CH3.4.asmDATAS SEGMENTmem dw 0,1,2,0,0,3,2,0,5,0,0,1count dw ($-mem)/2DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES

21、,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea di,mem-2 ;先减 2 再恢复mov cx,countL:; 找到 0 元素cmp cx,0jz nextadd di,2mov ax,didec cxcmp ax,0jnz Lmov si,dipush cxL2:; 找到非 0 元素cmp cx,0jz nextadd si,2mov ax,sidec cxcmp ax,0jz L2mov di,ax ;复制过去mov word ptr si,0; 复制后自己变0pop cxjmp Lnext:INT 21HCODES ENDSEND

22、 START题目名称 实验四 循环程序设计1题目关键字循环结构程序题目录入时 间2013-4-22 17:28:16实验目的.掌握汇编语言源程序结构。.掌握汇编语言循环结构程序设计方法。二、实验要求.编写完整的汇编语言程序: 从键盘上输入一串字符(用回车键结束,使用10号功能调用。) 放在STRING中,试编制一个程序测试字符串中是否存在数字。如有, 则把CL的第5位置1 ,否则将该位置置0。2) 在首地址为DATA的字数组中,存放了 100H个16位补码数,试 编写一个程序,求出它们的平均值放在AX寄存器中;并求出数组中 有多少个数小于此平均值,将结果放在BX寄存器中。 已知数组A包含15个

23、互不相等的整数,数组B包含20个互不相题目内容等的整数。试编制一个程序,把既在A中又在B中出现的整数存放 于数组C1中。4) 简化的歌德巴赫猜想:任何一个大于6的偶数均可以表示为两个 素数之和。现从键盘输入一个065535之间的无符号整数,试验证 歌德巴赫猜想。如输入数12,输出:12=5+7如输入数20,输出:20=3+17 20=7+13如输入数7,输出:Must be even如输入数3,输出:Must be greater than or equal to 6.演示程序运行结果,请指导教师检查。三、思考从键盘上输入一串字符时,数据缓冲区如何定义?题目创建人 题目注释4.1.asmDAT

24、AS SEGMENTString db 128,?,128 dup($)DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea dx,Stringmov ah,0ahint 21hlea si,String+1 ;字符串个数地址mov cl,simov ch,0inc si;第一个字符地址mov al,sicmp al,30hjl L1cmp al,39hjg L1or cl,00001000b ;CL 第五位置 1jmp

25、nextinc siloop Lnext:MOV AH,4CHINT 21HCODES ENDSEND STARTasmDATAS SEGMENTDATA dw 1,2,3,4,5,6,7,8,9,10count dw ($-DA TA)/2DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DATASMOV DS,AXmov dx,0mov ax,0mov cx,countlea si,DATAL:;计算总数mov bx,siadd ax,bxadd

26、si,2loop Lmov bx,count;求平均值div bxlea si,DATAmov cx,count;设置循环个数mov bx,0;初始化L2:mov dx,sicmp dx,axjnl L3;bx+inc bxL3:add si,2loop L2MOV AH,4CHINT 21HCODES ENDSEND STARTasmDATAS SEGMENTA db 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29count1 dw $-ABdb 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20count2

27、dw $-BC1db 15 dup(?)DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea di,C1lea si,Amov cx,count1mov bx,0L:;在 L 中取 A 的一个元素push cx;保存 CXmov al,Abxinc bxmov cx,count2lea si,BL2:;在 B 中找有否相同的元素mov dl,siinc sicmp al,dljz L3loop L2jmp L4L3:; 找

28、到就赋给C1mov di,dl inc diL4:pop cx loop LMOV AH,4CHINT 21HCODES ENDS END STARTasm ; 这道题目不难,关键是很烦;分几步走。1.取多位十进制数2.判断质数 3.显示十进制数4.将每个结果循环输出; 有几点要注意;1.因为数可以用16位,所以判断大小记得JA,JB,而不是JG,JL;2.用 BX 作乘法,除法,要留意住DX;3.看清楚哪个变量会受到影响,比如 AX 经常被使用,容易数据丢失 ; DATAS SEGMENTsentence1 db Must be even$sentence2 db Must be great

29、er than or equal to 6$ TOC o 1-5 h z crlf db 0dh,0ah,$ num dw 0 tempdw 0temp2dw 0keydw 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXL:;从键盘取得数字,存进nummov ah,1 int 21h cmp al,0dh jz L2sub al,30hmov cl,almov ch,0mov ax,nummov bx,10mul bxa

30、dd ax,cxmov num,axjmp LL2:;换行lea dx,crlfmov ah,9int 21hmov ax,numcmp ax,6jb error1sar ax,1;取第一位到 CF,奇数第一位必为jc error2jmp nexterror1:;必须是偶数lea dx,sentence2mov ah,9int 21hmov ah,4chint 21herror2:;大于等于 6 才行lea dx,sentence1mov ah,9int 21hmov ah,4chint 21hnext:mov cx,numsub cx,3mov bx,1ba:inc bxmov ax,num

31、sub ax,bxmov temp,axcall qiuzhishu ; 验证是否质数cmp key,1;key=1 表示是合数jz finallymov temp2,axmov ax,num sub ax,temp xchg ax,temp call qiuzhishu ;验证另一个是否质数 cmp key,1 jz finallymov ax,num;下面这一段代码call xianshi; 是为了显示mov ah,2;sum = x + ymov dl,=;这种格式int 21h;将前面求到的总数mov ax,temp2;和两个质数分别显示到屏幕push temp call xiansh

32、i mov dl,+ mov ah,2 int 21hpop ax call xianshilea dx,crlf;换行mov ah,9int 21hfinally:loop bamov ah,4ch int 21hqiuzhishu:;这个子程序都是用来求质数的push axpush bxpush cxpush dxmov bx,2mov cx,tempsub cx,2next0:mov ax,tempcmp ax,3;2 是质数jb next2 mov dx,0 div bxinc bxcmp dx,0jz next1 loop next0jmp next2 next1:mov key,1

33、jmp next3 next2:mov key,0 next3:pop dx pop cx pop bxpop axretxianshi:;显示多位十进制数字push axpush bxpush cx push dx mov dx,0mov cx,0mov bx,10L3:div bxpush dxmov dx,0 inc cxcmp ax,0jnz L3L4:pop dxadd dl,30hmov ah,2int 21hloop L4 pop dx pop cx pop bxpop axretCODES ENDSEND START题目名称 实验五 循环程序设计2题目关键字循环结构题目录入时

34、间2013-4-26 23:17:07实验目的.掌握汇编语言源程序结构。.掌握汇编语言循环结构程序设计方法。二、实验要求.编写完整的汇编语言程序:设在A、B和D字单元中分别存放着三个数。若三个数都不是0, 则求出三个数的和并存放在S单元中;若其中有一个数为0,则把其 他两个单元也清零。请编写此程序。题目内容 (2) 试编写一个程序,要求比较数组ARRAY中的三个16位补码数, 并根据比较结果在终端上显示如下信息:? 如果三个数都不相等则显示0;? 如果三个数有两个相等则显示1;? 如果三个数都相等则显示 2。(3)根据欧几里德辗转相除法求两个正整数M、N的最大公约数,步 骤为:求M/N的余数R

35、;如果R=0 ,则N为最大公约数,退出循环;用N更新M的值,用R更新N的值;重复步。(4) Link 指向一个字线性表,其中的首单元保存线性表的长度,编 一个程序,将该线性表中内容为0FFFFH的项删除。2.演示程序运行结果,请指导教师检查。四、提交内容将各个源程序代码、exe文件压缩为RAR后提交到作业系 统。在“自评内容”栏中写出完成作业的情况以及在做作业过程中 出现的问题和解决的方法。题目创建人 题目注释II iiaaa4in* kmii uaaii uaaasmDATAS SEGMENTA dw 2B dw 1D dw 2S dw ?DATAS ENDSSTACKS SEGMENTST

36、ACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea si,Amov bx,0mov cx,3L:mov ax,sicmp ax,0jz aooadd bx,axadd si,2loop Ljmp aoo2aoo:;三个单元置 0mov ax,0push axpush ax push ax pop A pop B pop Daoo2:;三个数之和mov dl,bl add dl,30h mov ah,2 int 21hMOV AH,4CHINT 21HCODES ENDSE

37、ND STARTasmDATAS SEGMENTarray dw 1,-1,-1DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov cx,0;从 0 开始计数,遇到相等就加 1lea si,arrayadd si,2mov ax,si;记住拿第二个数,分别和第一个和第三个比较mov bx,si-2cmp ax,bxjnz L1inc cxL1: mov bx,si+2 cmp ax,bx jnz L2 inc cxL2:m

38、ov dl,cl add dl,30h mov ah,2 int 21hMOV AH,4CH INT 21HCODES ENDSEND STARTasmDATAS SEGMENTtemp1 dw 0temp2 dw 0crlf db 0ah,0dh,$DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXL:;从键盘取得数字,存进 temp1mov ah,1int 21hcmp al,0dhjz L2sub al,30hmov c

39、l,almov ch,0mov ax,temp1mov bx,10mul bxadd ax,cxpush axmov temp1,axjmp LL2:lea dx,crlfmov ah,9int 21hL3:;从键盘取得数字,存进temp2mov ah,1int 21hcmp al,0dhjz L4sub al,30hmov cl,almov ch,0mov ax,temp2mov bx,10mul bxadd ax,cxmov temp2,axjmp L3L4:mov dx,0mov ax,temp1mov bx,temp2continue:div bxcmp dx,0jz nextmov

40、ax,bxmov bx,dxmov dx,0jmp continuenext:lea dx,crlf;换行mov ah,9int 21hmov ax,bxcall xianshiMOV AH,4CHINT 21Hxianshi:;显示多位十进制数字push bx push cx push dx mov dx,0 mov cx,0 mov bx,10A1:div bxpush dx mov dx,0 inc cxcmp ax,0jnz A1A2:pop dxadd dl,30h mov ah,2 int 21hloop L2 pop dx pop cx pop bx pop ax retCODE

41、S ENDSEND STARTasmDATAS SEGMENTLink dw 9,3,0ffffh,2,1,0ffffh,1,2,0ffffhfinial dw $DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea si,Link;首地址add si,2L2:mov ax,sicmp ax,0ffffhjnz L3jz L41L3:add si,2jmp L2L41:mov di,siL42:;找到0FFFFH项,和不是

42、这个项数交换cmp di,finialjz nextmov bx,dicmp bx,0ffffhjz L5mov si,bxmov bx,0ffffhmov di,bxjmp L3L5:add di,2jmp L42next:MOV AH,4CHINT 21HCODES ENDSEND START题目名称 实验六 结构化程序设计题目关键字 结构化程序 简化段结构题目录入时 间2013-5-3 21:42:56一、实验目的.掌握汇编语言简化段结构。.掌握汇编语言综合程序设计方法。二、实验要求.编写完整的汇编语言程序:从键盘输入一系列字符(以回车符结束),并按字母、数字及其 他字符分类计数,最后显

43、示这三类的计数结果(用简化段源程序结 构)。已定义了两个整数变量A和B,试编写程序完成下列功能(使用 简化段源程序格式):? 若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中;? 若两个数均为奇数,则将两数均加1后存回原变量;? 若两个数均为偶数,则两个变量均不改变。用减奇数次数的方法,求一个数的近似平方根,这个平方根是题目内容 一个整数。如求17的平方根,可以用17相继减去奇数1、3、5、7、- 当结果为负数时停止,即:17-1-3-5-7-9 V 0可以看出,17在减去5次奇数后结果变为负数,可以近似认 为17的平方根在4与5之间,计算NUM的平方根,如果NUM=17,则ANS 中保

44、存结果4。以下面形式定义一个长整数,其所占用字节数由N得到,比如128 位的数 5746352413DE89674523BC9A78563412H定义成:NUMDB12H,34H,56H,78H,9AH,0BCH,23H,45HDB 67H,89H,0DE H,13H,24H,35H,46H,57HNDB$-NUM试编写一个程序,实现对N字节的NUM的值求补(类似NEG的操作), 并把求补后的值仍保存在NUM中。.演示程序运行结果,请指导教师检查。题目创建人 题目注释asm.model small.dataletter dw 0;字母digital dw 0;数字otherdw 0;其他字符c

45、lrdb 0dh,0ah,$.codestart:mov ax,datamov ds,axjmp Lupl:inc letterjmp Lupd:inc digitaljmp Lupo:inc otherL:;各种判断mov ah,1int 21hcmp al,0dhjz nextcmp al,30hjl upocmp al,3ahjl updcmp al,41hjl upocmp al,5bhjl uplcmp al,61hjl upocmp al,7bhjl uplcmp al,7bhja upojmp Lnext:lea si,letter;用 si 控制地址mov bx,0mov cx

46、,3;循环三次,分别输出字母,数字,和其他字符的个数next2:lea dx,clrmov ah,9int 21hmov dx,si+bxadd si,2add dl,30hmov ah,2int 21hloop next2mov ah,4chint 21hend startasm.model small.dataA dw 2B dw 3.codestart:mov ax,datamov ds,axmov ax,Arcr ax,1jnc L2;判断 A 为偶数mov bx,Brcr bx,1jnc next;两者为偶数,均没变化inc A;两者为奇数,分别加1inc BL2:mov bx,Bp

47、ush bxrcr bx,1jnc next;B 也是偶数,两者不变push A;A 为偶数, B 为奇数,两者交换push Bpop Apop Bnext:mov ah,4chint 21hend startasmDATAS SEGMENTdigital dw 18DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ax,digitalmov bx,1mov dx,0L:sub ax,bx cmp ax,0 jl ne

48、xt inc dx add bx,2 jmp Lnext:add dl,30h mov ah,2 int 21hMOV AH,4CHINT 21HCODES ENDS END STARTasmDATAS SEGMENTNUM DB 12H,34H,56H,78H,9AH,0BCH,23H,45HDB 67H,89H,0DEH,13H,24H,35H,46H,57H$-NUMDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DATASMOV DS,AXl

49、ea si,NUMmov cx,Nstc;1在这里L:mov al,sinot al;求补即是取反+1adc al,0mov si,alinc siloop LMOV AH,4CHINT 21HCODES ENDSEND START题目名称 实验七 子程序设计1题目关键字子程序题目录入时 间2013-5-7 10:15:29、实验目的.掌握汇编语言完整段和简化段源程序结构。题目内容2掌握汇编语言综合程序设计方法。二、实验要求.编写完整的汇编语言程序:.写一段子程序SKIPLINES ,完成输出空行的功能。空行的行数由 用户在主程序中通过键盘输入,并将行数放在AX寄存器中。).设有10个学生 的

50、成绩分别是76 , 69, 84, 90, 73, 88, 99, 63, 100和80分。试编制一个子程序统计60-69分,70-79分,80-89分, 90-99分和100分的人数,并分 别放到S6,S7,S8,S9 和S10单元中。 编写一个程序,计算1 + 2 + 3 + 4 + N 的累加和,并把累加和以十进制形式显示出来。(不能使用公式计算“累加和=NX(N+1) /2 ,必须使用程序实现循环累加来计算)。(4)根据中华人民共和国国家标准GB 11643-1999中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体 码和一位数字校验码组成。排列顺序从左至右依次为:六

51、位数字地 址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位 数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。下面介绍计算校验码的算法:先引入公式:(右边最低位为第1位,左边最高位为第18位)S也(Ai*Wi)( i = 2, 3,,18 )表示号码字符从右至左包括校验字符在内的位置序号;A:表示第i位置上的号码字符值;W:表示第i位置上的加权因子,其数值依据公式 W =2A(i-1) mod11计算得出。下表列出身份号码中各个位置上的加权因子 W数值。i18 17 1) 1514 13 121

52、11098765432W7910584216379105842有了 W值表后,可以简化S的计算过程,得出S后计算余数Y, Y的 计算公式为:Y = mod(S, 11),再根据下表找出 Y对应的校验码即为要求身份证号码的校验码CoY012345678910校验码C10X98765432编写一个程序,完成从键盘上输入一个17位的身份证号(身份证号 的前17位,即上面描述中的第18位至第2位),通过计算补充第1位后, 将完整的身份证号显示出来。(5)设有一段英文,其字符变量名为ENG,并以$字符结束。试编写 一段程序,查单词SUN在该文中出现的次数,并输出显示出现的次 数。.演示程序运行结果,请指

53、导教师检查。三、提交内容将各个源程序代码、exe文件压缩为RAR后提交到作业系统。在“自 评内容”栏中写出完成作业的情况以及在做作业过程中出现的问题 和解决的方法。题目创建人题目注释asmDATAS SEGMENTclrf db 0ah,0dh,$num dw 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXcall SKIPLINESMOV AH,4CHINT 21HSKIPLINES:L:;从键盘取得数字,存进 AXm

54、ov ah,1int 21hcmp al,0dhjz L2sub al,30hmov cl,almov ch,0mov ax,nummov bx,10mul bxadd ax,cxmov num,axjmp LL2:mov ax,num; 行数放 AXmov cx,ax;次数L3:lea dx,clrfmov ah,9int 21hloop L3retCODES ENDSEND STARTasmDATAS SEGMENTstudent db 76d,69d,84d,90d,73d,88d,99d,63d,100d,80dcount dw $-student TOC o 1-5 h z dw 0

55、dw 0dw 0dw 0dw 0s10dw 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea di,student mov cx,count call statisticMOV AH,4CH INT 21Hstatistic:mov ax,diinc dicmp cx,0jz nextdec cxcmp al,60djl up5cmp al,70djl up6cmp al,80djl up7cmp al,90djl

56、up8cmp al,100djl up9jz up10next:retup5:inc s5jmp statisticup6:inc s6jmp statisticup7:inc s7jmp statisticup8:inc s8jmp statisticup9:inc s9jmp statisticup10:inc s10jmp statistic CODES ENDSEND STARTasmDATAS SEGMENTclrf db 0ah,0dh,$num dw 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,

57、DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXcall total;计算总数push ax;避免影响先入栈lea dx,clrfmov ah,9int 21hpop ax; 出栈call xianshimov ah,4chint 21htotal:;从键盘取得数字,存进 nummov ah,1int 21hcmp al,0dhjz L2sub al,30hmov cl,almov ch,0mov ax,nummov bx,10mul bxadd ax,cxmov num,axjmp LL2:mov cx,nummov ax,0mov bx,1add

58、 ax,bxinc bxloop LL retxianshi:;显示多位十进制数字push axpush bxpush cxpush dxmov dx,0mov cx,0mov bx,10L3:div bxpush dxmov dx,0 inc cxcmp ax,0jnz L3L4:pop dxadd dl,30hmov ah,2int 21hloop L4pop dxpop cxpop bxpop axretCODES ENDSEND STARTasmDATAS SEGMENTstring db 30 dup($)crlf db 0ah,0dh,$quan db 7d,9d,10d,5d,8

59、d,4d,2d,1d,6d,3d,7d,9d,10d,5d,8d,4d,2dtabl db 10 x98765432DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea dx,string ;接收输入字符串mov ah,0ahint 21hlea dx,crlf;换行mov ah,9int 21hmov dx,0mov cx,17dlea si,string+2 ;首字符地址lea di,quan;权地址L:;计算总权mo

60、v ax,sisub al,30hmov bx,dimul bladd dx,axinc siinc diloop Lmov ax,dxmov bl,11div bl;余数 Ymov cx,0mov cl,ahlea si,tablcmp cx,0jz L22L2:inc si;去到余数 Y 对应的校验码loop L2L22:mov bx,0lea di,string+2L3:mov dl,dicmp dl,0dhjz finallyinc dijmp L3finally:;将第 18 位号码插入原来17位的字符串后面mov dl,simov di,dllea dx,string+2 ;十八位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论