汇编语言王爽

时间:2024-05-31 18:37:44编辑:花茶君

Intel汇编语言程序设计 和 王爽的汇编语言 那本比较好?

话说怎么这么巧,这三本我都看过。。。

王爽的简单,容易明白,容易入门,没法精通。

Intel汇编语言,内容详细,缺点就是太厚了,你可以和王爽的比下,快3本了。
所以他写的比较全面。

windows32,这个我曾经是作为后续才看到,因为它是WIN32汇编,不是X8086汇编了,
他使用的是WINDOWS界面编程。win32汇编和8086汇编类似于MFC和C的的关系一样。
调用的都是API,就不是单纯的MOV ADD JMP了。


需要学习WIN32汇编,最好是在8086汇编的基础上去学习,就像是从简单的学起,。


下面是我的建议:
如果你只想了解,开拓视野。建议去学王爽的,简单,容易理解,加个汇编交流群,百度一个小甲鱼汇编视频,一半个月就自学会了。
如果你想玩黑客,破解。。。那最好去学习,intel的。如果你连这都看不明白,那么想深入的搞清楚汇编语言,一个字,难。
如果你是学计算机的,想在windows下进行编程,并且想最个有界面的,可以先学,王爽,然后学习win32.


把王爽的《汇编语言》学完之后是什么水平


汇编是计算机编程中最为基础部分。
你先学了C/C++,正处于空中楼阁的尴尬处境。因为你在开发C/C++的时候,总觉得有一层雾纱隔着。无法真正看到问题的本质。人类对于无法控制的事总有一种反抗及寻根问底的情绪。
而你把汇编学通了,才能真正地从汇编连通到操作系统,连通到C/C++。你才能真正看清计算机。这才能有机会步入大师级计算机学问境界。
用一句话:站在巨人的肩膀上……
比如只学现在流行的面向对象语言C#、Java等,虽然在短期内你可能会成为这方面的能手,但是想突破是有限的。因为本身的起步就低了。
再言,现在网络发展极快,C#、Jave这种浮于水面的技术很快会被新的东西所取代。但是C#、Java和更加新的未知技术都是从底层的汇编等变化而来。只要学好基础,一句话:以不变应万变。
我不知道学了汇编达到什么水平。但是学了汇编绝对能达到难以想象的水平。


王爽汇编语言,直接定址表的例题编程出错,求大神纠错

;把al保存的数值以16进制字符的形式显示在屏幕中央
assume cs:code
code segment

start:
mov al, 0abh ;设置参数
call showbyte
mov ah, 0
int 16h
mov ax, 4c00h
int 21h

showbyte:
jmp short show
table db '0123456789ABCDEF' ;用table[bx]来访问字符表

show:
push bx
push cx
push es
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b

mov bl, ah ;通过用table[bx]查表
mov bh, 0 ;把ah里的数值转换成对应的ASCII码
mov ah, table[bx]
mov bx, 0b800h
mov es, bx
mov es:[160 * 12 + 40 * 2], AH ;改
mov bl, al
mov BH, 0 ;改
mov ah, table[bx]
mov es:[160 * 12 + 41 * 2], AH ;改
pop es
pop cx
pop bx
ret
code ends
end start

共改了三处。


王爽汇编语言的题

感觉这是个很难用语言说明白的东西,可能是我的能力有限吧
给你提供一些信息来帮助你理解一下吧:

jmp指令可跳转到根本就不是程序的数据段里去执行,当然数据是随机的,所以这些数据不能组成一个有实际意义的子程序
程序是分过程的,所以真正的程序可能会分散在内存的不同的位置,比如说中断程序
还有内存中某一部分具体是程序还是数据是很难确定的,因为操作系统为程序分配的内存地址不是固定的
但有些程序和数据的位置却又是相对固定的,比如中断程序(中断程序的开始地址是在中断向量表中定义的)和BIOS数据区(是一些关于硬件等的一些重要的数据,位置是很固定的,因为修改这些内存的BIOS程序都是通过绝对地址来寻址的)

可以说数据是为程序服务的,没有程序,定义在内存中的数据就失去意义了
而程序是操作数据的

多写一些程序就会加深对程序和数据的理解了


汇编语言(王爽)的实验5,第五问和第六问补全后,对全部代码逐行解析,以及分段进行分析总结

实验5 编写、调试具有多个段的程序
-----------------------------------------
(1)
1.保持不变
2.
3.X-2,X-1
(2)
1.保持不变
2.
3.X-2,X-1
4.(N/16+1)*16 [说明:N/16只取整数部分]
(3)
1.保持不变
2.
3.X+3,X+4
(4)
答:第3个仍然可以正确执行。因为如果把end指令后的标号start去掉后,编译器便会顺序执行程序。换句话说:当未给编译器预先的通知,要求其从哪开始执行程序时,编译器就自动以'至上向下'的顺序进行编译执行源程序。
(5)完整程序如下:
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:mov ax,a
mov es,ax
mov ax,c
mov ds,ax
mov bx,0
mov cx,8
s1:mov ax,es:[bx]
add [bx],ax
add bx,2
loop s1
mov ax,b
mov es,ax
mov ds,ax
mov bx,0
mov cx,8
s2:mov ax,es:[bx]
add [bx],ax
add bx,2
loop s2
mov ax,4c00h
int 21h
code ends
end start
(6)完整程序如下:
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,b
mov ss,ax
mov sp,10h
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start

实验6 实践课程中的程序
-------------------------------
(2)编程:完成问题中的程序。
问题7.9完整程序如下:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s: ;外循环
push cx
mov si,3
mov cx,4
s0: ;内循环
mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop s0
add bx,16
pop cx
loop s
mov ax,4c00h
int 21h
codesg ends
end start


请问既然学习了王爽的《汇编语言》为什么还要学习《windows环境下32位汇编语言程序设计(第二版)》呢?

王爽书中的汇编语言,是16位实模式下的汇编语言。
罗云斌的书讲的是工作在32位环境下保护模式的汇编。
时至今日,传统的dos时代已经过去了。
很少应用程序还设计为工作在16位环境下。大部分都工作在32位环境下。
而16位和32位是两码事,16位中是调用各种中断完成功能,
但在32位保护模式中,这是非法指令,只能调用windwos系统提供的api而不能直接调用中断了。
32位环境的汇编的风格越来越接近c。
对于逆向而言,用16位的方法来反汇编32位,是不可行的。
同样,把32位程序反汇编结果以16位的方法来解也是不可行的。
在windows32下的逆向是必须掌握win32汇编。熟悉各种win32api,熟悉pe结构,熟悉脱壳,熟悉各种算法等等。
win32汇编只是学习逆向的基础,只会汇编不可能在逆向的路上走多远,还必须学习很多高级语言,和熟悉这些高级语言的反汇编形式和结构。
对于采用虚拟机的语言,则需要学习其虚拟机上运行的指令。
比如.net逆向,就必须掌握IL.
逆向很有趣,也很辛苦。希望lz坚持。


上一篇:玛丽艾伦马克

下一篇:咱家的那些事