程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编两行代码,或者是几分钟能写几行代码,或者是用什么所谓的可视化工具产生最少的代码这些工作,这都不是真正的高手境界。即使是这样的高手,那也都是无知者的自封。
我认为,一个程序员的成长可分为如下六个阶段。
Ø 第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。
Ø 第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中...
- [chaplinyip] 练拳不练功,到老一场空。不要过分关注语言,它只是拳脚上的招式罢了,缺乏思想再好的语言亦只能沦为花拳绣 09/03 21:11
- [ameteur] 不要说VB不行,它几乎能编出所有程序。 09/03 18:29
- [tomato] 第一题的答案不正确。 05/19 18:06
- [mess] 速度真快啊,前两天还做第三章的检测题呢 呵呵 这个可以debug下直接查看结果是否正确,好像是 05/11 18:16
- [mess] 答案不对,你根据push pop的操作步骤再想一想。 05/11 18:14
- [bade90] 写错了.郁闷 05/07 19:15
- [wsrf] 分析的很对。 05/06 23:22
- [wsrf] 博主如果添100H,还能符合 CS*10H + IP = 10000H吗? 05/06 23:21
- [bade90] 王爽的汇编学完了,还得学32位的呢。 哎。。 05/06 12:08
- [tomato] 这种程度就算彻底学明白了! 05/04 12:03
- [tomato] 期待博主博客中每个检测点作业! 03/23 20:30
[2009-08-31 02:22] 高手成长的六个阶段
阅读全文 |
评论次数(0) |
浏览次数(462) |
所属类型(心情杂谈)
[2009-05-09 11:48] 标志寄存器
1.标志寄存器具有什么样的功能?
(1)用来存储相关指令的某些执行结果;
(2)用来为CPU执行相关指令提供行为依据
(3)用来控制CPU的相关工作方式。
2.每个标志位的详细解释
ZF标志,零标志位。计算结果为0 则ZF = 1,否则为0
PF标志,奇偶标志位。计算结果的二进制数中1的个数是否为偶数,则PF = 1,否则为0
SF标志,符号标志位,如果计算结果也负,则SF = 1
*就像数据和指令都是二进制信息
一个数据也可以是有符号数也可以是无符号数
判断一个计算是有符号计算,还是无符号计算的时候,看SF标志位就可以知道
CF标志,进位标志位,保存无符号运算中的进位...
(1)用来存储相关指令的某些执行结果;
(2)用来为CPU执行相关指令提供行为依据
(3)用来控制CPU的相关工作方式。
2.每个标志位的详细解释
ZF标志,零标志位。计算结果为0 则ZF = 1,否则为0
PF标志,奇偶标志位。计算结果的二进制数中1的个数是否为偶数,则PF = 1,否则为0
SF标志,符号标志位,如果计算结果也负,则SF = 1
*就像数据和指令都是二进制信息
一个数据也可以是有符号数也可以是无符号数
判断一个计算是有符号计算,还是无符号计算的时候,看SF标志位就可以知道
CF标志,进位标志位,保存无符号运算中的进位...
阅读全文 |
评论次数(0) |
浏览次数(480) |
所属类型(心情杂谈)
[2009-05-09 11:25] 检测点11.1
检测点 11.1
写出下面每条指令执行后,ZF,PF,SF等标志位的值
sub al,al ZF = ____ PF = ____ SF = ____
mov al,1 ZF = ____ PF = ____ SF = ____
push ax ZF = ____ PF = ____ SF = ____
pop bx ZF = ____ PF = ____ SF = ____
add al,bl ZF = ____ PF = ____ SF = ____
add al,10 ZF = ____ PF = ____ SF = ____
mul al ...
写出下面每条指令执行后,ZF,PF,SF等标志位的值
sub al,al ZF = ____ PF = ____ SF = ____
mov al,1 ZF = ____ PF = ____ SF = ____
push ax ZF = ____ PF = ____ SF = ____
pop bx ZF = ____ PF = ____ SF = ____
add al,bl ZF = ____ PF = ____ SF = ____
add al,10 ZF = ____ PF = ____ SF = ____
mul al ...
阅读全文 |
评论次数(1) |
浏览次数(585) |
所属类型(汇编作业)
[2009-05-08 20:53] 检测点3.2
(1)
MOV AX,1000H
MOV DS,AX
--------- mov ax,1000h
--------- mov ss,ax
--------- mov sp,0010h
PUSH [0]
PUSH [2]
PUSH [4]
....
(2)
同样设置 SS和SP寄存器就可以...
MOV AX,1000H
MOV DS,AX
--------- mov ax,1000h
--------- mov ss,ax
--------- mov sp,0010h
PUSH [0]
PUSH [2]
PUSH [4]
....
(2)
同样设置 SS和SP寄存器就可以...
阅读全文 |
评论次数(1) |
浏览次数(556) |
所属类型(汇编作业)
[2009-05-08 20:41] 检测点3.1
【2】
2662H
e626H
E626H
2662H
0C88H
3B54H
0
00E6H
0
26H
010CH
不想解释了,数学计算而已
【2】
①
mov ax,6622h
JMP 0FF0:0100 FF0 * 10H + 100 = 10000H ←跳
MOV BX,AX ↓
↓
MOV AX,2000H (AX) = 2000H ←← ←← ←←
MOV DS,AX...
2662H
e626H
E626H
2662H
0C88H
3B54H
0
00E6H
0
26H
010CH
不想解释了,数学计算而已
【2】
①
mov ax,6622h
JMP 0FF0:0100 FF0 * 10H + 100 = 10000H ←跳
MOV BX,AX ↓
↓
MOV AX,2000H (AX) = 2000H ←← ←← ←←
MOV DS,AX...
阅读全文 |
评论次数(1) |
浏览次数(603) |
所属类型(汇编作业)
[2009-05-06 19:06] 检测点10.2
下面的程序执行后,AX中的数值为多少
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,0 执行后AX=0
1000:3 e8 01 00 call s PUSH IP,JMP S
1000:6 40 inc ax AX = AX +1
1000:7 58 S:pop ax 弹出数据到AX
答案:AX中的数值为6
这里其实重要的就是CALL 指令
明白CALL指令的过程 这个问题就迎刃而解了
我详细的分析一下
CALL S指令
这里别忘了 ...
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,0 执行后AX=0
1000:3 e8 01 00 call s PUSH IP,JMP S
1000:6 40 inc ax AX = AX +1
1000:7 58 S:pop ax 弹出数据到AX
答案:AX中的数值为6
这里其实重要的就是CALL 指令
明白CALL指令的过程 这个问题就迎刃而解了
我详细的分析一下
CALL S指令
这里别忘了 ...
阅读全文 |
评论次数(1) |
浏览次数(559) |
所属类型(汇编作业)
[2009-05-06 18:44] 检测点10.1
补全程序,实现从内存1000:0000处开始执行指令
assume cs:code,
stack segment
db 16 dup (0)
stack ends
code segment
start:mov ax,stack ;把栈段的段地址送入AX
mov ss,ax ;再把AX里的栈段送入SS寄存器
mov sp,16 ;设置栈段的偏移地址
mov ax,_____ ;这里应写段地址
push ax ;这里压入刚写的段地址
mov ax,____...
assume cs:code,
stack segment
db 16 dup (0)
stack ends
code segment
start:mov ax,stack ;把栈段的段地址送入AX
mov ss,ax ;再把AX里的栈段送入SS寄存器
mov sp,16 ;设置栈段的偏移地址
mov ax,_____ ;这里应写段地址
push ax ;这里压入刚写的段地址
mov ax,____...
阅读全文 |
评论次数(2) |
浏览次数(550) |
所属类型(汇编作业)
[2009-05-02 20:21] 检测点2.3
下面的3条指令执行后,CPU几次修改IP?
都是在什么时候?最后IP中的值是多少?
mov ax,bx ip+2指向下一条指令,改变IP一次,执行指令
sub ax,ax IP+2指向下一条指令,改变IP一次,执行指令
jmp ax IP+2执行下一条指令,改变IP一次,执行指令后
又改变一次
一共改变四次
不明白的可以这么想
每一个指令都会改变IP
注意:是先改变IP然后再执行指令的
但是JMP是跳转指令,
跳转指令会改变IP
详细解释:
mov ax,bx
从CS:ip 指向的开始
mov ax,bx 送到指令缓冲器
IP + 指令...
都是在什么时候?最后IP中的值是多少?
mov ax,bx ip+2指向下一条指令,改变IP一次,执行指令
sub ax,ax IP+2指向下一条指令,改变IP一次,执行指令
jmp ax IP+2执行下一条指令,改变IP一次,执行指令后
又改变一次
一共改变四次
不明白的可以这么想
每一个指令都会改变IP
注意:是先改变IP然后再执行指令的
但是JMP是跳转指令,
跳转指令会改变IP
详细解释:
mov ax,bx
从CS:ip 指向的开始
mov ax,bx 送到指令缓冲器
IP + 指令...
阅读全文 |
评论次数(2) |
浏览次数(607) |
所属类型(汇编作业)
[2009-05-01 14:38] 模块调用示例
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!' ;16byte
data ends
stack segment
db 128 dup (0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov dh,12 ;设置参数
mov dl,30 ;设置参数
call plus ;调用模块
mov...
data segment
db 'welcome to masm!' ;16byte
data ends
stack segment
db 128 dup (0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov dh,12 ;设置参数
mov dl,30 ;设置参数
call plus ;调用模块
mov...
阅读全文 |
评论次数(1) |
浏览次数(492) |
所属类型(心情杂谈)
[2009-05-01 14:35] 算出显存偏移地址模块
字符串输出模块
调用方式
call Plus
参数dh 传递行数
参数dl 传递列数
注意:栈至少有点空间才可以,还有因为SI里保存着算出的偏移地址,所以不用保存SI寄存器
子程序
Plus:push ax
push dx
mov al,160
mul dh
mov si,ax
mov al,2
mul dl
add si,ax
pop dx
pop ax
ret...
调用方式
call Plus
参数dh 传递行数
参数dl 传递列数
注意:栈至少有点空间才可以,还有因为SI里保存着算出的偏移地址,所以不用保存SI寄存器
子程序
Plus:push ax
push dx
mov al,160
mul dh
mov si,ax
mov al,2
mul dl
add si,ax
pop dx
pop ax
ret...
阅读全文 |
评论次数(1) |
浏览次数(575) |
所属类型(心情杂谈)
『 查看更多文章 』