简单实现printf函数
记得以前看谭老头的书自学C语言,着实吃了不少苦头(主要是爱钻牛角尖), 翻开第一章就来了个printf函数,倒不是它很难用,而是觉得它很神奇, 不神奇吗, 我当时很好奇为什么你让它printf一行字符串,它就能打印出来, 太智能了!!!
后来又学了汇编,顿时觉得来劲了,神气个啥呀,看老孙也给你写一个:
记得以前看谭老头的书自学C语言,着实吃了不少苦头(主要是爱钻牛角尖), 翻开第一章就来了个printf函数,倒不是它很难用,而是觉得它很神奇, 不神奇吗, 我当时很好奇为什么你让它printf一行字符串,它就能打印出来, 太智能了!!!
后来又学了汇编,顿时觉得来劲了,神气个啥呀,看老孙也给你写一个:
这是迄今为止我编写的最复杂的程序(其实也没编过什么),即王爽汇编最后一个课程设计。
这次课程设计的任务是编写一个可以自行启动计算机,不需要在现有操作系统环境中运行的程序。
该程序的功能如下:
1)列出功能选项,让用户通过键盘进行选择,界面如下:
1. reset pc :重新启动计算机
2. start system :引导现有操作系统
3. clock :进入时钟程序
4. setclock :设置时间
2)用户输入“1”后重新启动计算机。
3)用户输入“2”后引导现有操作系统。
4)用户输入“3”后,执行动态显示当前日期、时间的程序,按下f1键后,改变显示颜色;按下esc键,返回主选单。
5)用户输入“4”后可更改当前的日期,时间,更改后返回到主选单
这是王爽汇编上的一道实验题,安装一个包含四个功能子程序的中断例程。
没什么特别这处,主要是第一次没用org指令(王爽在书中好像没提到),结果总是出错。
北京时间5月3日凌晨3点33分,历时4个多小时,做完了第一个课程设计。很是庆幸我的手指,还有敲打键盘的力气,饥锇,头沉,眼酸,旁边有个蚊子在我身边飞来飞去,右前上方,gali的呼噜声滚滚而来,无穷无尽,右前方,shit的磨牙声清脆刺耳,边绵不绝。不写了,不说了,快挂 了,倒…那个小蚊…你想咬就咬吧…..啊…
Read the rest of this entry »
昨晚快做完的时候,快要断电了,结果不得不赶紧关机我这个没有电池的伪笔记本,现在终于完成通过调试了,这里面用到了三个子程序,这么长长的一大篇近百行源码实现的功能却简单的令人发指:以十进制方式将ax中的数据显示在屏幕上。
不过,这对于了解电脑内部的工作原理是非常有用的。以前学的半吊子硬件基础对现在的汇编学习也起了不小帮助。
网工看的一踏糊涂,法语课上的直想呕吐(一个单词tmd十几个变位),还是汇编好。
某些老师上课烂还可以原谅,但还爱点名就是你们的不对了。
五一到了,明天去野人谷。
Read the rest of this entry »
assume cs:code,ds:data,ss:stack
data segment
db 3 dup (‘wweellccoommee ttoo mmaassmm!!’) ;比较变态
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0b800h
mov es,ax
mov bx,780h
mov di,1
mov cx,16
t1:mov byte ptr 00h[di],02h
mov byte ptr 20h[di],24h
mov byte ptr 40h[di],71h
add di,2
loop t1 ;集中设置颜色
mov cx,3
mov di,0
s1:push cx
mov cx,16
mov si,0
s:mov ax,[di]
mov es:[bx].40h[si],ax
add si,2
add di,2
loop s
add bx,0a0h
pop cx
loop s1 ;将字符放入屏幕中央
mov ax,4c00h
int 21h
code ends
end start
其实,还有更简单的方法,就这么着吧!
看到第八章了,应该有一半了吧,为这个实验题搞得头晕脑胀的,就是把data段中的数据按年代分类存入table段中,累死了,方法虽然有点白痴,但总算是做出来了!睡觉去啦!哈哈
Read the rest of this entry »
原程序是由chunk lee在debug下编写的,我将其改编,以便用masm5编译。尽管声音只有嘟的一下,但能够体验一下通过汇编直接控制硬件的感觉,还是很有趣的。
assume cs:code
code segment
mov cx,700h
s1:push cx
in al,61h
xor al,02h
out 61h,al
mov cx,1500h
s:loop s
pop cx
loop s1
mov ax,4c00h
int 21h
code ends
end
这几天在看汇编,用的是网上好评如中国人口一般多的王爽汇编教程。学习过程很幸福,很激动,在此严重感谢王爽老师,并强烈鄙视某些道貌岸然的教科书!!
放着好好的网络工程师不学,怎么突然对汇编感兴趣了呢? 我的记划是,上课就去看网工,回来就看汇编,累了就看英语。
下面是debug的一些命令:
r, 查看,修改寄存器。r cs, r ip
d,查看内存 如d 1000:0
e,修改内存 如e 1000:0
a,编写汇编指令
u,将机器码翻译为汇编指令
t,执行指令
g, 执行到给定的偏移地址
p,重复执行循环。
Read the rest of this entry »