博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编实验九
阅读量:6277 次
发布时间:2019-06-22

本文共 2293 字,大约阅读时间需要 7 分钟。

一.实验内容

1.完成在屏幕上输出内存单元中的十进制两位数

2.完成在屏幕上输出data段定义的5个十进制两位数,数据和数据之间以空格间隔

3.教材实验9:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串‘weclome to masm’

二.实验步骤

1.代码如下

 

; 在屏幕上输出内存单元中的十进制两位数assume cs:code, ds:datadata segmentdb 12db ?,? ; 前一个字节用于保存商,后一个字节用于保存余数data endscode segmentstart:mov ax,datamov ds,ax ; 补全指令,使得ds <-- data段地址mov ah,0mov al,ds:[0] ; ax <-- data段字节单元的被除数12mov bl,10div blmov ds:[1],al ; 补全代码,让商保存到data段注释中指定的单元mov ds:[2],ah ; 补全代码,让余数保存到data段注释中指定的单元mov ah,2mov dl,ds:[1] ; 补全代码,使得dl <-- data段中保存的商的字节单元数值add dl,30h ; 补全代码,使得dl中的数值转换为数字字符int 21hmov ah,2mov dl,ds:[2] ; 补全代码,使得dl <-- data段中保存余数的字节单元数值add dl,30h ; 补全代码,使得dl中的数值转换为数字字符 int 21hmov ax,4c00hint 21hcode endsend start

实验结果如下:

 

2.代码如下:

;完成在屏幕上输出data段定义的5个十进制两位数,数据和数据 之间以空格;间;隔。 assume cs:code, ds:datadata segment     db 12,35,96,55,67data endscode segmentstart:      ; 补全程序,参考t1.asm,综合应用以下知识完成:      ; (1) loop指令、内存单元地址的灵活表示      ; (2) div指令, 数字→数字字符的转换      ; (3) int 21h的2号子功能,完成单个字符输出的方法,即:       ;     mov ah,2      ;     mov dl,待输出字符或其ASCⅡ码      ;     int 21h      ; (4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符            mov ax,data      mov ds,ax      mov si,0      mov cx,5S:   mov ah,0       mov al,ds:[si]      mov bl,10      div bl         mov dl,al         mov dh,ah        mov ah,2      add dl,30h      int 21h      mov ah,2      mov dl,dh      add dl,30h      int 21h      mov ah,2      mov dl,0      int 21h      inc siloop S      mov ax,4c00h      int 21hcode endsend start

实验截图如下:

 

3.这题花费了不少时间 主要还犯了写低级错误  push  inc等后面竟然加了逗号

另外一开始考虑循环  没注意到有些值之间相互影响

尽量使用不同的寄存器

此外为了满足题目要求输出在屏幕中间 做了些基础的计算,但很粗糙

代码如下:

assume ds:data, cs:code,ss:stackdata segment       db 'welcome to masm!'         db 2H,24H,71H        data endsstack segmentdb 0stack endscode segmentstart:          mov ax,data        mov ds,ax          mov ax, stack        mov ss,ax                  mov ax,0b800H        mov es,ax                   mov bx,1920           mov si,0        mov di,0       mov cx,3       mov bp,16    s:     push cx       mov cx,16       mov si,60       mov di,0s1:   mov al,ds:[di]       mov es:[bx+si],al       mov al,ds:[bp]       mov es:[bx+si+1],al       add si,2       inc diloop s1       add bx,160       inc bp       pop cxloop scode endsend start

运行截图如下:

在程序改bug过程中出现很多好玩的事

如屏幕持续刷新图像,出现各种颜色

这些都与写的循环有关

转载于:https://www.cnblogs.com/wtblogwt/p/10073610.html

你可能感兴趣的文章
HttpContext.Current.Cache使用文件依赖问题
查看>>
Sql Server之旅——第五站 确实不得不说的DBCC命令(文后附年会福利)
查看>>
dataguard dubugs
查看>>
利用httpclient和多线程刷訪问量代码
查看>>
白话经典算法系列之中的一个 冒泡排序的三种实现
查看>>
控制台程序添加滚轮滑动支持
查看>>
POJ----(3974 )Palindrome [最长回文串]
查看>>
gridlaylout 简单布局
查看>>
WPF RadioButton 转换
查看>>
为什么使用 Bootstrap?
查看>>
在什么情况下使用struct,struct与class的区别
查看>>
STL源代码剖析(一) - 内存分配
查看>>
数据库update死锁
查看>>
http中使用json封装数据的性能测试
查看>>
开发ffmpeg/live555常见问题错误及解决方法
查看>>
appium跑demo简单实例讲解
查看>>
你能识别这些科技公司的真假logo吗?
查看>>
glibc的了解,对内核的封装
查看>>
Shell中的${},##和%%的使用
查看>>
Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入...
查看>>