今天早上起来,决定把代码“优化”一下,使程序的逻辑变得更加清晰,更加便于读者阅读。虽然改造后的程序长度增加了,但是思路也清晰多了。
同样地,程序也比较长,有400多行,其中任务程序刚好是1024个字节,占软盘的两个扇区。
代码如下:
assume cs:code
code segment
;+++++++++++++++++++++任务程序+++++++++++++++++++++++++++++++++
renwu:
mov bx,0
mov es,bx
mov bx,7c00h
mov ah,2...


- [游客] 博主真是我偶像啊,精神可嘉,值得学习!!! 01/30 01:53
- [游客] 不错,但还是有点浑 04/18 21:30
- [游客] 楼主的学习精神可佳 在下佩服佩服 希望你有更多好文章发表 让我们大家共同进步 03/19 23:48
- [游客] 很好!! 这种精神值得学习 发扬! 11/28 08:52
- [nono] 我刚学汇编,很有帮助,写了。。。 10/31 19:33
- [游客] 谢谢了,哈 04/18 17:02
- [游客] 很好!对我很有帮助! 03/11 21:51
- [游客] 大家共同促进中国的计算机事业吧! 02/27 19:41
- [gjcqfdy] 我也在用emu8086 由于在做实验七的时候发现emu8086好像不支持 bx.idata[si]形 02/16 00:15
- [laoshu0824] 太好了,,,我很仔细的读了王爽老师的第一章,,不过看了这篇文章侯,,发现有几个知识点我还是没有注意到 12/15 15:42
- [yc2010] 这个问题是实验16中的代码不懂。 table: dw sub1,sub2,sub3,sub4 09/07 21:55
- [lxc345] 谢谢!!! 希望以后多多指教啊. 05/06 16:07
[2008-06-19 19:53] 课程设计2-方案二(实测通过)
阅读全文 |
评论次数(3) |
浏览次数(676) |
所属类型(汇编作业)
[2008-06-19 19:47] 课程设计2-方案一(实测通过)
还有几天就要考试了,趁着考试之前,痛下决心,决定无论如何要把课程设计2赶出来,免得夜长梦多(其实也拖了很久了,一直没时间去弄)。终于,在经过几个熬夜到三点以后,昨晚终于把它调试成功。但是由于过分追求代码的简短,故逻辑不太明显,不利于读者阅读。但不管怎么样,还是贴出来,作为反面教材吧。希望大家在以后编程序的时候多注重一下结构化与规范化。
本方案没有采用数据标号,只是采用了简单容易理解的跳转指令。由于无法截图,故就不贴图了。
程序代码如下,比较长,大概有400多行左右吧……
assume cs:code
code segment
;++++++++++++++++++...
本方案没有采用数据标号,只是采用了简单容易理解的跳转指令。由于无法截图,故就不贴图了。
程序代码如下,比较长,大概有400多行左右吧……
assume cs:code
code segment
;++++++++++++++++++...
阅读全文 |
评论次数(2) |
浏览次数(585) |
所属类型(汇编作业)
[2008-06-07 14:32] 实验17
离开差不多两周,现在重新回归,呵呵……
==========
assume cs:code
code segment
int7:
push bx
cmp ah,1
ja back ;功能号判断
call jisuan ;计算面号、磁道号、扇区号
mov dl,0 ;设置驱动器号
mov al,1
inc ah
inc ah ;int 13h的功能号(此处没有直接赋予,而是间接赋予)
int 13h
back...
==========
assume cs:code
code segment
int7:
push bx
cmp ah,1
ja back ;功能号判断
call jisuan ;计算面号、磁道号、扇区号
mov dl,0 ;设置驱动器号
mov al,1
inc ah
inc ah ;int 13h的功能号(此处没有直接赋予,而是间接赋予)
int 13h
back...
阅读全文 |
评论次数(3) |
浏览次数(612) |
所属类型(汇编作业)
[2008-05-11 23:48] 实验16 编写包含多个功能子程序的中断例程(修改)
assume cs:code
code segment
;======新的int 7ch中断例程=======
int7ch: jmp short set
table: dw sub1+200h,sub2+200h,sub3+200h,sub4+200h
set: push bx
cmp ah,3
ja back
mov bl,ah
mov bh,0
...
code segment
;======新的int 7ch中断例程=======
int7ch: jmp short set
table: dw sub1+200h,sub2+200h,sub3+200h,sub4+200h
set: push bx
cmp ah,3
ja back
mov bl,ah
mov bh,0
...
阅读全文 |
评论次数(6) |
浏览次数(570) |
所属类型(汇编作业)
[2008-05-06 23:09] 实验15 安装新的int 9中断例程
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset int9 ;设置ds:si指向源字符串首地址
mov ax,0
mov es,ax
mov di,204h ;设置es:di指向目的首地址
mov cx,offset int9end -offset int9 ...
code segment
start: mov ax,cs
mov ds,ax
mov si,offset int9 ;设置ds:si指向源字符串首地址
mov ax,0
mov es,ax
mov di,204h ;设置es:di指向目的首地址
mov cx,offset int9end -offset int9 ...
阅读全文 |
评论次数(4) |
浏览次数(627) |
所属类型(汇编作业)
[2008-05-05 23:32] 实验14 访问CMOS RAM (方案二)
本方案与方案一的区别在于,本方案没有调用显示子程序,而是直接将数据送到显示缓冲区,达到显示的效果。
;=================说明===================
; 题目要求以“年/月/日 时:分:秒”的格式显示时间
; 我的思路是取6个信息要用到6次循环,在取到“日”这个信息时,CX=4,因此在进行下一次循环前
; 先判断CX是否为4,如果为4,则在后面加空格;如果大于4,则加/号;小于4大于1时,则加:号;
; 小于或等于1时,则不加任何符号。
; 流程图如下:
; ...
;=================说明===================
; 题目要求以“年/月/日 时:分:秒”的格式显示时间
; 我的思路是取6个信息要用到6次循环,在取到“日”这个信息时,CX=4,因此在进行下一次循环前
; 先判断CX是否为4,如果为4,则在后面加空格;如果大于4,则加/号;小于4大于1时,则加:号;
; 小于或等于1时,则不加任何符号。
; 流程图如下:
; ...
阅读全文 |
评论次数(1) |
浏览次数(687) |
所属类型(汇编作业)
[2008-05-05 23:11] 实验14 访问CMOS RAM (方案一)
本方案调用了DOS提供的显示子功能中断例程来显示信息。
;=============说明=============
; 题目要求以“年/月/日 时:分:秒”的格式显示时间
; 我的思路是取6个信息要用到6次循环,在取到“日”这个信息时,CX=4,因此在进行下一次循环前
; 先判断CX是否为4,如果为4,则在后面加空格;如果大于4,则加/号;小于4大于1时,则加:号;
; 小于或等于1时,则不加任何符号。
; 流程图如下:
; 取循环次数
; ...
;=============说明=============
; 题目要求以“年/月/日 时:分:秒”的格式显示时间
; 我的思路是取6个信息要用到6次循环,在取到“日”这个信息时,CX=4,因此在进行下一次循环前
; 先判断CX是否为4,如果为4,则在后面加空格;如果大于4,则加/号;小于4大于1时,则加:号;
; 小于或等于1时,则不加任何符号。
; 流程图如下:
; 取循环次数
; ...
阅读全文 |
评论次数(1) |
浏览次数(709) |
所属类型(汇编作业)
[2008-04-21 13:46] 实验11 编写子程序
代码说明:
由于转换得到的结果都是在内存中,不方便直接查看,故我两次调用了以前写的show_str,在转换前显示一次原字符串,在转换后再调用显示转换后的字符串,这样就便于结果的直接观察。真正实现转换功能的子程序是letterc部分。
源代码如下:
assume cs:codesg
datasg segment
db "Beginners's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
...
由于转换得到的结果都是在内存中,不方便直接查看,故我两次调用了以前写的show_str,在转换前显示一次原字符串,在转换后再调用显示转换后的字符串,这样就便于结果的直接观察。真正实现转换功能的子程序是letterc部分。
源代码如下:
assume cs:codesg
datasg segment
db "Beginners's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
...
阅读全文 |
评论次数(1) |
浏览次数(560) |
所属类型(汇编作业)
[2008-04-16 21:12] 实验10.3 数值显示(两个方案)(修改)
想了两种不同的思路,一起发出来……附图为执行结果
方案一:
;*******************************************************************************
; 子程序描述
;名称:dtoc
;功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符
;参数:(ax)=word型数据
; ds:si指向字符串的首地址
;返回:无
;***************************************************...
方案一:
;*******************************************************************************
; 子程序描述
;名称:dtoc
;功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符
;参数:(ax)=word型数据
; ds:si指向字符串的首地址
;返回:无
;***************************************************...
阅读全文 |
评论次数(4) |
浏览次数(570) |
所属类型(汇编作业)
[2008-04-16 01:30] 实验10.2 解决除法溢出问题(修改)
;--------------------------------------------------------------------------------
;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位
; (cx)=余数
;----------------------------------------...
;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位
; (cx)=余数
;----------------------------------------...
阅读全文 |
评论次数(2) |
浏览次数(524) |
所属类型(汇编作业)