汇编语言补充作业

发布 2022-09-09 14:18:28 阅读 4878

《微机系统与接**术》汇编补充作业。

1. 寻址方式小结。请根据已填的格式,完成下面表中的空白部分:

2.指出下列8088指令的错误:

1) mov ah, bx

2) mov [bx], si]

3) mov ax, [si][di]

4) mov mydat[bx][si], es:ax

5) mov bl, 1000

6) mov cs, ax

7) mov ds, bp

8) xlat bx

9) in ax, 0382h

10) out ax, 20h

3. 按要求编写下面的程序段。

1) 利用移位指令计算dx=3×ax+7×bx,假设为无符号数运算,无进位。

2) 用逻辑运算指令实现数字0~9的ascii码与非压缩bcd码的互相转换。

3) 把中的双字右移4位。

4) 假设从4a00h:0000开始的4个字节中存放了4个非压缩的bcd码,现在按照低地址对低位,高地址对高位的原则,将他们合并到dx中。

4. 请说明下面两段程序的功能。

1) mov si, 600h

mov di, 601h

mov ax, ds

mov es, ax

mov cx, 256

stdrep movsb

2) cld

mov ax, 0fefh

mov cx, 5

mov bx, 3000h

mov es, bx

mov di, 2000h

rep stosw

5. 假设ds=2000h. bx=1256h, si=528fh, 位移量table=20a1h,[232f7h]=3280h, [264e5h]=2450h, 试问执行下列段内间接寻址的转移指令后,转移到有效地址是什么?

i. jmp bx

ii. jmp table[bx]

iii. jmp [bx][si]

6. 判断下列程序段跳转到条件。

1) xor ax, 1e1eh

je equal

2) test al, 10000001b

jnz there

3) cmp cx, 64h

jb there

7. 如果条件跳转指令的跳转目标范围超出-128~127的范围,该如何处理?举例说明。

8. 按要求编写下面的程序段。

1) 当dx高4位全为0时,使ax=0,否则ax=-1。

2) 已知字符串string包含有256byte的内容,将其中所有的‘$’符号替换成空格(‘

3) 所谓回文字符串是指一个字符串正读和倒读都是一样的,例如字符串‘abcdeffedcba’就是一个回文字符串,而字符串‘abcfddcab’就不是回文字符串。现在有一个字符串string,包含有16个字节的内容,请编写程序段,判断该字符串是否为回文字符串。

4) 统计以‘$’字符结束的字符串string的字符个数。

9. 设置cx=0,则loop指令将执行多少次?例如:

mov cx, 0

delay: loop delay

10. 在下面程序段的括号中如果分别放上下面的指令。

1) loop l20

2) loopne l20

3) loope l20

试说明,当程序执行完时 ax, bx, cx, dx四个寄存器的内容分别是什么?

mov ax, 01

mov bx, 02

mov cx, 03

mov dx, 04

l20: inc ax

add bx, ax

shr dx, 1

ret11. 下面两条短转移指令的转移地址a10和a20分别是多少?(用16进制来表示)

1) 0110eb f7 jmp a10

2) 0110eb 09 jmp a20

指令地址(16进制) 指令码汇编语句。

12. 按要求编写下面的程序段。

1) 将elems中的100个字节数据的位置颠倒过来(即第一个字节和第100个字节的内容交换,第二个字节和第99个字节的内容交换……)

2) 有两个3位的ascii码字串asc1和asc2定义如下:

asc1 db ‘578’

asc2 db ‘694’

asc3 db ‘0000’

请编写计算asc3=asc1+asc2的程序段。

3) 编写四字节ascii码串‘3785’与ascii数码‘5’相乘的程序段。

13. 请编写完整程序在一个升序字节数组中查找数n,找到后将此数从数组中删除,并使得cf=0;没找到返回cf=1。数组的首地址和末地址为a_head和a_end。

14. 请编写完整程序从键盘读取字符,如果是十进制的‘0’~‘9’则在屏幕上输出该数的8位二进制码,并将数字依次存放到buf开头的数组中,如果读入的字符是’q’或者‘q’,则程序退出,其他情况在屏幕上打印“you must input 0~9, or ‘q’ or ‘q’”。

如输入的字符是‘9’,则输出“00001001”)

提示:语句“you must input 0~9, or ‘q’ or ‘q’”定义成以’$’结尾的字符串,键盘输入和屏幕输出,请参看教材后的dos功能调用(int 21h)的相关功能。

输出一个数的2进制形式应该从最高位开始输出,可以将此段程序定义成一个过程。

汇编语言作业汇总

教材p15 习题。参 略 略 教材p26 27习题。略 教材p71 72习题。补充说明 1 对于3.1题,当操作数是存储器操作数时,注意区分内存操作数的物理地址与存储单元的内容!2 对于3.2题,不仅要能够判断,如果出错,还要知道具体出错的原因。3 对于3.7和3.9,要能够分析出每一条指令执行完后...

汇编语言程序设计作业

题1.编写汇编语言源程序实现从键盘上输入1949至2049年中的某一日,计算并输出该日是这一年的第几天以及星期几。1 提示 通过输入的年 year 月 month 日 day 来计算该日是年内第几天 days 再以 year 1 year 1 4 year 1 100 year 1 400 days...

汇编语言程序设计作业

冒泡法排序 题目 1.程序简介 采用冒泡法进行排序 2.流程图 3 实现输入数据直接在程序中通过数组定义,或用文件方式读入,不要采用scanf include using namespace std define count 20数据个数。void bubblesort long array,int...