2022年2022年汇编语言实验 .pdf

上传人:Che****ry 文档编号:27226620 上传时间:2022-07-23 格式:PDF 页数:9 大小:65.82KB
返回 下载 相关 举报
2022年2022年汇编语言实验 .pdf_第1页
第1页 / 共9页
2022年2022年汇编语言实验 .pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《2022年2022年汇编语言实验 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言实验 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、汇编语 言实验一.数值运算编程1. 实验目的:通过变成及程序 调试,熟悉 8086/8088运算指令以及 debug 动态调试程序的方法2.实验内容: (1)无符号二 进制数运算已知有 20 个 8 位的无符号二 进制数,编一个程序完成 对这 些数的求和假定这20个数为10,20,30,40,50,60,70,80,90,100,110,120,130,144,165,176,187,198,209,220 该加法程序的思路为 : 用ax做为累加器 , 在低位 al 上做累加 , 在高位 ah上进行和 0的带进位的加法 , 并将结果保存后显示出来. 具体程序和注解如下所示data segmen

2、t num db 10,20,30,40,50,60,70,80,90,100,110,120,130,144,165,176,187,198,209,220 reslt dw 0 disply db 8 dup(?) data ends code segment assume cs:code,ds:data main proc far push ds mov ax,0 push ax mov ax,data mov ds,ax mov ax,0 mov bx,offsetnum ;取 num的首地址给 bx mov cx,20 ;因为有二十个数 , 所以要做二十次循环 , 每做一次 cx 减

3、一sum: add al,bx ;求和过程 adc ah,0 inc bx loop sum mov bx,offsetreslt ;将所累加的结果放入reslt中 mov bx,ax call disp ;调用子程序来显示 ret main endp 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - disp proc near ;显示用的子程序 lea bx,reslt mov ax,bx mov di,10 lea bx,d

4、isply mov cx,0 s1: mov dx,0 div di mov bx,dl inc bx inc cx cmp ax,0 jnz s1 s2: dec bx mov dl,bx add dl,30h mov ah,2 int 21h dec cx jnz s2 ret disp endp code ends end main 二. 非数值运算编程1. 实验目的通过非熟知运算编程 , 进一步了解 8086/8088 汇编语言程序设计方法和技巧2. 实验内容 : (1)统计, 分类 a.设有 100h 个数, 编程统计正数 , 负数和零的个数 100h个数太多了 , 所以这里就只取了

5、10h 个数来做统计 , 若要统计100h个数, 只要在数据段中添加其余的数, 并且将 di 的数值改为 100h 即可. 此处的程序有点拖沓 , 因为一开始没有想好将数逐个和零比较就好了, 所以采用的是如下的方法 , 若减去一不是负的是正数 , 如果加一不是正的是负数 , 其余的数字就是 0. 此处的显示程序与上述显示程序略有不同, 因为是循环显示 , 并且加入了逗号将三个数字分开 , 具体的程序和注释如下所示stack segment stack dw 128 dup(?) stack ends data segment num db -10,-9,-8,-7,-6,-5,-4,-1,0,

6、0,0,1,2,3,4,5,6,7,8,9,10 reslt db 3 dup(?) disply db 8 dup(?) data ends 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - code segment assume cs:code,ds:data main proc far push ds sub ax,ax push ax mov ax,data mov ds,ax mov di,23 mov cx,0 mov

7、 dx,0 lea bx,num mov ax,0 start:dec di js over mov ax,bx add bx,2 sub ax,1 jns pos add ax,1 js negt jmp zero pos:add cl,1 jmp start negt:add ch,1 jmp start zero:add dh,1 jmp start over:lea bx,reslt mov bx,cl inc bx mov bx,ch inc bx mov bx,dh lea di,reslt mov cl,3 jmp m2 m1: mov dl, mov ah,2 int 21h

8、m2: mov al,di call disp inc di 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - dec cl jnz m1 ret main endp disp proc near mov dl,10 lea bx,disply mov ch,0 s1:mov ah,0 div dl mov bx,ah inc bx inc ch cmp al,0 jnz s1 s2: dec bx mov dl,bx add d

9、l,30h mov ah,2 int 21h dec ch jnz s2 ret disp endp code ends end main (2) 代码转换编程将 10h 个未组合的 bcd 码转换成 ASCII 码首先我将这 10h 个 BCD 码存在从 a 址起的数据段中 , 然后逐一取出 BCD 数,并将 BCD码分别进行高四位和第四位的转换, 然后在用 int 21h中的 2 号功能将它们显示出来 , 与前面相同 , 显示时要加如逗号隔开 . 具体的程序和注释如下所示data segment a db 14h,05h,87h,24h,30h,00h,17h,56h,71h,66h n

10、equ 10 data ends stack segment stack db 200 dup(?) stack ends code segment assume cs:code,ds:data,ss:stack 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - main proc far mov ax,data mov ds,ax lea si,a mov ch,n lp:mov dl,si ;取压缩 BCD 数 mov bl,

11、dl ;暂存此数 mov cl,4 ;高 4 位 BCD 数转换 shr dl,cl or dl,30h ;高位如果是 0就不显示出来 cmp dl,30h jne next mov dl, next:mov ah,2 int 21h mov dl,bl and dl,0fh ;低 4 位 BCD 数转换 or dl,30h ; mov ah,2 ;入口参数 :dl- 字符的 ASCII int 21h ;低 4 位 ASCII 显示 cmp ch,1;最后一个数后不显示逗号 je exit mov dl, ;两数之间加显逗号 mov ah,2 ;入口参数 :dl 字符的 ASCII int

12、21h inc si dec ch jnz lp exit:mov ah,4ch int 21h code ends end main (3) 排序将 80h 个无符号的八位二进制数按递增方式排列. 同时考虑有符号数 , 递减的情况. 和前面一样我只定义了10h 个有符号数 , 只是为了表明原理 , 如果要处理 80h 个数, 那么就在数据段中加入其余的数, 并且将 dx 的处世值换为 80h 即可. 具体程序中用 bx 和 di 作为两个数据指针 ,bx 指向第一个数据 ,di指向第二个数据 .bx逐次加一 , 并且和 di 所指向的数据比较大小 , 如果 di 指向的数字小于bx 指向的数

13、字, 那么, 就将两个数交换位置 . 每次交换之后 , 最小的数据都放在了bx 所指向的第一个位置 , 但是这种算法有个不好的地方. 它会将每次排好的数据放入原先存放数据的单元中 , 将原来的数据冲刷掉 , 所以如果要保留原有数据 , 就得先将其mov到另外的储存单元 . 该程序的显示部分与前面也略有不同, 因为有负数的存在, 增加了 m3和 m4用于负数的输出 . 若和 0 相减为负数那么就是负数, 要在其前名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - -

14、 - - - - - - - 加上” - ”, 并且对数值去反后再加一 . 如果要实现递减的排列 , 那么只需要将”cmp ah, al ”改为” cmp al, ah ”. 详细的程序和注释如下所示: data segment num db 0,1,2,3,4,-1,-2,-3,-4,-5,10,9,8,7,6,5 disply db 8 dup(?) data ends code segment assume cs:code,ds:data main proc far push ds sub ax,ax push ax mov ax,data mov ds,ax lea bx,num mo

15、v dx,16 mov cx,dx find2:mov di,bx find1:inc di mov al,bx mov ah,di cmp ah,al jns m1 mov bx,ah mov di,al m1:loop find1 inc bx dec dx mov cx,dx loop find2 lea di,num mov cl,16 jmp m3 m2:mov dl, mov ah,2 int 21h m3:mov al,di sub al,0 jns m4 mov dl,- mov ah,2 int 21h mov al,di 名师资料总结 - - -精品资料欢迎下载 - - -

16、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - xor al,0ffh inc al m4:call disp inc di dec cl jnz m2 ret main endp disp proc near mov dl,10 lea bx,disply mov ch,0 s1: mov ah,0 div dl mov bx,ah inc bx inc ch cmp al,0 jnz s1 s2: dec bx mov dl,bx add dl,30h mov ah,2 in

17、t 21h dec ch jnz s2 ret disp endp code ends end main 三.dos 和 bios 功能调用1. 实验目的初步熟悉 dos 操作系统 dos 和 bios 功能调用2. 实验内容(1) 利用系统功能调用的八号功能实现键盘输入, 在用 2 号功能将其显示在屏幕上, 可适当对输入字符做合理的变换. 这里做的变换并没有按照书上的大小写转换, 而是将其按照输入顺序反向后显示出来, 我建立了两个指针指向输入的字符串, 一个指向串首 , 一个指向串尾 . 将指针 2 指向的字符交换 , 字符交换的操作要进行到字符串首指针的值大于字符串尾指针的值位置 , 此时

18、才可将字符串的次序颠倒. 具体的程序和注释如下所示data segment buf db 255,?,255 dup(?) data ends 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - code segment assume cs:code,ds:data main proc far mov ax,data mov ds,ax mov dx,offset buf mov ah,10 int 21h mov si,offse

19、t buf+2 ;si 指向串首 mov bx,si ;bx指向船尾 +1 add bl,buf+1 ;串首偏移地址加上键入字符的个数 adc bh,0 mov byte ptrbx,$ ;串尾后送串结束符 dec bx again:mov al,bx ;字符交换 xchg al,si mov bx,al dec bx ;调整指针 inc si cmp si,bx ;两指针进行比较 jc again mov buf+1,0ah ; 换行符的 ASCII 送串首 +1 单元 mov dx,offset buf+1 ;从换行开始输出 mov ah,9 int 21h mov ah,4ch int

20、21h code ends end main (2) 利用 BIOS功能调用在图形显示器上画一个矩形这个程序就利用了逐次加一, 再逐次减一 , 改变坐标位置 , 循环写点的方法来实现画矩形 . 具体的程序和注释如下data segment x db 9 dup(?) data ends ; code segment assume cs:code,ds:data main proc far mov bx,20h lp1: mov ah,0ch mov dx,20h 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -

21、- - - - - - 第 8 页,共 9 页 - - - - - - - - - mov cx,bx mov ah,00h mov al,4h int 10h inc bx cmp bx,60h jbe lp1;画第一条边 mov bx,20h lp2: mov ah,0ch mov dx,bx mov cx,20h mov al,4h int 10h inc bx cmp bx,60h jbe lp2;画第二条边mov bx,20h lp3: mov ah,0ch mov dx,60h mov cx,bx mov al,4h int 10h inc bx cmp bx,60h jbe lp3;画第三条边mov bx,20h lp4: mov ah,0ch mov dx,bx mov cx,60h mov al,4h int 10h inc bx cmp bx,60h jbe lp4;画第四条边 mov ah,4ch int 21h main endp code ends end main 电子 091180182 郑婕名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁