华南农业大学汇编语言8086习题附答案.docx

上传人:b****7 文档编号:9692375 上传时间:2023-02-05 格式:DOCX 页数:85 大小:52.55KB
下载 相关 举报
华南农业大学汇编语言8086习题附答案.docx_第1页
第1页 / 共85页
华南农业大学汇编语言8086习题附答案.docx_第2页
第2页 / 共85页
华南农业大学汇编语言8086习题附答案.docx_第3页
第3页 / 共85页
华南农业大学汇编语言8086习题附答案.docx_第4页
第4页 / 共85页
华南农业大学汇编语言8086习题附答案.docx_第5页
第5页 / 共85页
点击查看更多>>
下载资源
资源描述

华南农业大学汇编语言8086习题附答案.docx

《华南农业大学汇编语言8086习题附答案.docx》由会员分享,可在线阅读,更多相关《华南农业大学汇编语言8086习题附答案.docx(85页珍藏版)》请在冰豆网上搜索。

华南农业大学汇编语言8086习题附答案.docx

华南农业大学汇编语言8086习题附答案

题目名称

实验一汇编语言程序结构

题目关键字

源程序结构debug

题目录入时间

2013-3-1322:

45:

26

题目内容

一、实验目的    

1.掌握汇编语言程序上机过程。

 2.掌握汇编语言结构.

  3.了解汇编程序、连接程序、DOS系统装入和返回功能。

 4.掌握用DEBUG调试汇编语言程序的方法

二、实验要求

1. 编写完整的汇编语言程序:

(1)逆序输出字符串“BASED ADDRESSING”。

(2)从键盘上输入2个一位的正数,求出它们的和(假设和不超过1位).

(3)试编写一段程序,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字单元UP中;找出小于42H的无符号数的个数并存入字单元DOWN中.

2。

在DEBUG下查看程序执行的过程,以及变量值的变化.

3。

演示程序运行结果,请指导教师检查.

三、思考

1。

汇编语言程序中语句END后的标号作用是什么?

 2.采用标准序结构编制源程序,用ret结束程序运行返回操作系统时,可否将语句mainproc far中的far属性去掉,为什么?

3。

一个段的大小为多少?

一定是64KB吗?

如何在DEBUG下查看程序在内存的存放情况?

 

四、提交内容

  将各个源程序代码、exe文件压缩为RAR后提交到作业系统。

题目创建人

题目注释

1。

1.asm

DATASSEGMENT

  Stringdb ”BASEDADDRESSING”

  count dw  $-String

DATAS ENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

  ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

 MOVDS,AX

 movcx,count  ;循环次数

 leasi,count—1 ;将最后一个字符‘G’的地址给si

 L:

  

  mov ah,2

  movdl,[si]

  dec si

  int21h

loopL

MOVAH,4CH

 INT 21H

CODES ENDS

END START

1。

2。

asm

DATASSEGMENT

 x db"x=$”

 ydb"y=$"

 z db”x+y=$"

DATASENDS

STACKSSEGMENT

 

STACKSENDS

CODESSEGMENT

 ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

  MOVAX,DATAS

 MOVDS,AX

 

 mov ah,9   ;显示”x=”

lea dx,x

 int 21h

 

movah,1   ;输入X

 int21h

 subal,30h

 movcl,al  ;将X放在CL

 

 mov ah,9;显示”y=”

 leadx,y

   int21h

 

movah,1  ;输入Y

 int21h

sub al,30h

  addcl,al   ;两数字相加

movah,9;显示”z=”

 leadx,z

int21h

 

 movah,2   ;显示结果

movdl,cl

 adddl,30h

 int 21h

 MOVAH,4CH

INT 21H

CODESENDS

  ENDSTART

1。

3.asm

DATAS SEGMENT

arraydb128dup(41h,43h)

 up dw0

   down dw 0

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

 ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

  MOVDS,AX

 leadi,array

  mov cx,256

L:

 mov al,[di]

cmp al,42h

jl  L1

jaL2

L1:

  inc down

 jmp L3

L2:

 incup

 jmpL3

L3:

 inc di

loopL

 

MOVAH,4CH

 INT21H

CODESENDS

ENDSTART

题目名称

实验二 程序结构与简单程序设计

题目关键字

简单程序设计

题目录入时间

2013-4-1 22:

45:

55

题目内容

一、实验目的

    

1.掌握汇编语言源程序结构.

 2.掌握汇编语言调试方法。

 

二、实验要求

1。

编写完整的汇编语言程序:

(1)试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。

(2) 编写程序,从键盘接收一个小写字母,然后找出它的前导字母和后续字母,再按顺序显示这三个字符。

(3) 试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”,若不相同则显示“NO MATCH”.

(4) 编写程序,将一个包含有20个数据的数组M分成2个数组:

正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。

2。

在DEBUG下查看程序执行的过程,以及变量值的变化。

3。

演示程序运行结果,请指导教师检查。

 

三、思考

1对输入的非字母字符如何处理?

 2.字母“a”和“z"边界字符的处理方法是什么?

3.显示结果为多位数的时候如何输出?

四、提交内容

将各个源程序代码、exe文件,思考题的WORD文档压缩为RAR后提交到作业系统。

题目创建人

题目注释

2。

1。

asm

DATASSEGMENT

  crlfdb 0ah,0dh,’$’

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

 ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

 MOVDS,AX

 mov ah,1;输入数据会AL

   int21h

pushax;将AX存进栈里

 

  lea dx,crlf;换行

movah,9

int21h

   popdx  ;栈里数据放进DX,即将原先AX放进DX

subdl,20h  ;小写变大写要减去20h

 

 movah,2 ;输出

 int 21h

  

MOVAH,4CH

  INT21H

CODESENDS

 END START

2.2.asm

DATASSEGMENT

 Stringdb ’zabcdefghijklmnopqrstuvwxyza'

DATASENDS

STACKS SEGMENT

   

STACKS ENDS

CODES SEGMENT

 ASSUME CS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

 

leadi,String

 

 movah,1   ;输入字母

  int21h

L:

incdi  ;先DI自加1,第一次就是‘a'的地址,不是‘z’

    cmpal,[di];直到找到字母和输入的相匹配

jnz L

 

 decdi ;推前成为前端字母的地址

 mov cx,3  ;循环次数3

L2:

 movdl,[di]

incdi

  mov ah,2

  int21h

 loopL2

MOV AH,4CH

INT21H

CODESENDS

END START

2。

3.asm

DATASSEGMENT

String1db"thisisaprogram”

ﻩcount1dw$-String1

ﻩString2 db"thisisaprogram"

ﻩcount2dw$—String2

 answer1db'match','$’

answer2db’nomatch’,'$’ 

DATAS ENDS

STACKSSEGMENT

  

STACKSENDS

CODES SEGMENT

 ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

 MOVAX,DATAS

 MOVDS,AX

  

movax,count1

movbx,count2

   cmp ax,bx ;比较两个字符串的长度,如果不等就是不匹配

 jnznext

 

 movcx,count1 ;字符串长度

  leasi,string1 

    leadi,string2

L:

mov al,[si]

cmpal,[di];比较两个字符串的字符,如果不等就跳

 jnznext   

inc si

   inc di

loopL

 

 leadx,answer1 ;能到这里说明都匹配

 movah,9

 int21h

 jmpfinally ;跳去finally,避免顺序执行了next

    

next:

      ;显示不匹配

leadx,answer2

movah,9

 int21h

finally:

 

  MOVAH,4CH

   INT21H

CODESENDS

 ENDSTART

2.4。

asm

DATASSEGMENT

  Mdb5dup(-1,1,2,3)

P dw0

 N dw0

DATASENDS

STACKS SEGMENT

STACKSENDS

CODES SEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

 MOV AX,DATAS

MOVDS,AX

 

leasi,M

 mov cx,20  ;循环次数

L:

  moval,[si]

 cmpal,0;和0比较判断正负

jlL1

 jgL2

L1:

inc N

   jmpL3

L2:

 inc P

jmpL3

L3:

  inc si

 loopL 

 mov ax,P  ;输出P

  mov bl,10   ;设置除数10

  div bl   

movbh,ah  ;将ah(余数放在bh保留)

 mov dl,al ;将商显示

   adddl,30h

  movah,2

 int21h

mov dl,bh;将余数显示

  adddl,30h

 movah,2

  int21h

 

 movax,N   ;输出N

  movbl,10

 divbl

movbh,ah

movdl,al

 add dl,30h

movah,2

 int 21h

 mov dl,bh

adddl,30h

  movah,2

 int 21h

  

 MOVAH,4CH

INT 21H

CODES ENDS

 ENDSTART

题目名称

实验三分支程序设计

题目关键字

分支结构

题目录入时间

2013-4—1420:

14:

57

题目内容

一、实验目的

  

1.掌握汇编语言源程序结构。

2.掌握汇编语言分支结构程序设计方法.

二、实验要求

1.编写完整的汇编语言程序:

(1)试编写一段程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中。

(2)编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数.

(3)键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果.

(4)有一个首地址为mem的100个字的数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。

2.在DEBUG下查看程序执行的过程,以及变量值的变化.

3。

演示程序运行结果,请指导教师检查。

三、思考

1。

 求极值时程序初始化应该注意什么?

2. 如何从键盘上输入多位数?

3.第(4)小题有多少种做法?

四、提交内容

将各个源程序代码、exe文件以及思考题压缩为RAR后提交到作业系统。

提交时请填写自评内容。

题目创建人

题目注释

3。

1.asm

DATAS SEGMENT

DATAdw 1dup(1,2,-1,4,-2,-6)

 countdw($-DATA)/2

DATASENDS

STACKSSEGMENT

 

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

  MOVAX,DATAS

MOV DS,AX

 

 mov cx,count

 leasi,DATA—2

L1:

  ;将第一个偶数存在AX

  addsi,2

mov ax,[si]

dec cx

  testal,01h

jnzL1

 

L2:

    ;找到另外一个偶数

   add si,2

 mov bx,[si]

cmpcx,0

 jz L4

deccx

testbl,01h

jnzL2

 cmpax,bx ;比较两个偶数,如果ax〉bx那么跳到L3

  jgL3

  jmpL2

L3:

  mov ax,bx

 jmpL2

L4:

MOV AH,4CH

  INT21H

CODESENDS

 END START

3.2.asm

DATAS SEGMENT

NUMdw0 

  crlfdb0dh,0ah,'$'

DATASENDS

STACKS SEGMENT

 

STACKSENDS

CODESSEGMENT

 ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

 MOVAX,DATAS

MOVDS,AX

 movdx,0

   movcx,4

L:

 mov ah,1

int 21h

  cmpal,40h

jgL1

   jlL2

L1:

 subal,07h  ;大写字母多减7

L2:

 subal,30h  ;变成实际数字

 

 pushax  ;原来数字*16+新接受数字

 movax,NUM

 movbx,16  

 mulbx     

popbx

   adcal,bl

 mov NUM,ax

   loopL   ;循环4次

leadx,crlf

 movah,9

 int21h

  movcx,16

movbx,NUM

L3:

  

movdl,31h

 salbx,1    ;左移1位,改变CF

jcL4

 subdl,1  ;CF为0,所以DL减去1,变成0

L4:

 mov ah,2

 int21h

  loop L3

  MOVAH,4CH

INT21H

CODESENDS

END START

3。

3。

asm

DATASSEGMENT

Stringdb128,?

128dup(’$’)

   crlf  db 0dh,0ah,24h

 count dw0

  num dw0

DATASENDS

STACKSSEGMENT

 

STACKS ENDS

CODESSEGMENT

 ASSUME CS:

CODES,DS:

DATAS,SS:

STACKS

START:

 MOVAX,DATAS

MOVDS,AX

 

 leadx,String ;吸收字符串

  movah,0ah

 int 21h

 

 leadx,crlf  ;换行

 movah,9

  int21h

 

 leasi,String+1;cx存放着字符串个数

movcl,[si]

 movch,0

 

 leadi,String+2  ;从实际字符串开始

L1:

 moval,[di]

 incdi

 cmp al,30h

 jlL2

  cmpal,39h

jgL2

  dec num   ;如果是数字,先减num后加num,将其抵消

L2:

incnum   

  loopL1

 mov cx,0  

  movax,num

L3:

   ;余数放栈,检测商是否为0,为0就退出

 movbl,10

div bl

  pushax

 inccx   ;记录余数个数

 movah,0

  cmpal,0

  jnzL3

L4:

          ;将余数输出

popdx

 movdl,dh

 adddl,30h

   movah,2

 int21h

 loopL4

 MOV AH,4CH

INT21H

CODES ENDS

 ENDSTART

3。

4。

asm

DATASSEGMENT

 mem dw 0,1,2,0,0,3,2,0,5,0,0,1

countdw($-mem)/2

DATASENDS

STACKS SEGMENT

STACKSENDS

CODESSEGMENT

  ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

 MOVAX,DATAS

 MOV DS,AX

leadi,mem-2  ;先减2再恢复

  movcx,count

L:

    ;找到0元素

    cmpcx,0

   jz next

adddi,2

 movax,[di]

 deccx

cmpax,0

 jnzL

 

mov si,di

push cx

L2:

     ;找到非0元素

 cmpcx,0

 jz next

 addsi,2

movax,[si]

dec cx

  cmpax,0

   jzL2

  

mov[di],ax;复制过去

mov wordptr[si],0  ;复制后自己变0

pop cx

  jmpL

next:

 MOVAH,4CH

 INT 21H

CODESENDS

ENDSTART

题目名称

实验四 循环程序设计1

题目关键字

循环结构程序

题目录入时间

2013—4-22 17:

28:

16

题目内容

一、实验目的    

1.掌握汇编语言源程序结构。

2.掌握汇编语言循环结构程序设计方法。

二、实验要求

1。

编写完整的汇编语言程序:

(1)从键盘上输入一串字符(用回车键结束,使用10号功能调用。

)放在STRING中,试编制一个程序测试字符串中是否存在数字.如有,则把CL的第5位置1,否则将该位置置0.

(2) 在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一个程序,求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。

(3)已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。

试编制一个程序,把既在A中又在B中出现的整数存放于数组C1中。

(4) 简化的歌德巴赫猜想:

任何一个大于6的偶数均可以表示为两个素数之和。

现从键盘输入一个0~65535之间的无符号整数,试验证歌德巴赫猜想。

 如输入数12,输出:

  12=5+7

    如输入数20,输出:

 20=3+17

  20=7+13

   如输入数7,输出:

  Must be even

  如输入数3,输出:

   Must begreaterthan orequalto6

2。

演示程序运行结果,请指导教师检查。

三、思考

   从键盘上输入一串字符时,数据缓冲区如何定义?

题目创建人

题目注释

ﻫ4。

1.asm

DATASSEGMENT

 Stringdb128,?

128dup('$')

DATASENDS

STACKS SEGMENT

 

STACKS ENDS

CODESSEGMENT

  ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

 MOV AX,DATAS

 MOVDS,AX

  leadx,String

  mov ah,0ah

int21h

  

 leasi,String+1 ;字符串个数地址

 mov cl,[si]

 mov ch,0

incsi   ;第一个字符地址

L:

  moval,[si]

 cmpal,30h

jl L1

cmpal,39h

jgL1

  or cl,b;CL第五位置1

jmpnext

L1:

incsi

 loop L

next:

MOVAH,4CH

INT21H

CODESENDS

 END START

4.2。

asm

DATAS SEGMENT

 DATAdw 1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1