win32-API

win32-API

C++控制台编程

我们的控制台文本窗口是基于win32 api实现的
我们以例子来学习这种编程的方法:
控制台程序的外观和操作就像MS-DOS窗口一样,控制台有一个输入缓冲区以及一个或多个屏幕缓冲区:

  • 输入缓存区(input buffer)包含一组输入记录(input records),其中每个记录都是一个输入事件的数据。输入事件的例子包括键盘输入,鼠标点击,以及用户调整控制台窗口大小
  • 屏幕缓冲区(screen buffer)是字符与颜色数据的二维数组,他会影响控制台窗口文本的外观

例1:

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <windows.h>
int main()
{
printf("Hello World!\n");
Sleep(1000);
system("cls");
return 0;
}

我们发现这个程序和我们的一般的hello world程序不同,它实现的功能是在1000ms后清空控制台的内容,使用了sleep和system命令。

Read more
汇编实验

汇编实验

最后一批有意思的练习题

写在前面

  • 终于完成了Intel x86汇编的习题(我认为应该写的)+基础知识,基本上花了3周左右(除去假期中间的咕咕咕极长时间),可喜可贺,也该开学了。
  • 不coding死路一条
  • 不要停下来啊(指学习)
  • 下一阶段的目标就是数学+算法+Python网络编程
  • 不学数学读研死路一条

什么,你说假期里的前端学习?咕咕咕
汇编代码咋高亮啊,好像不支持…

Read more
汇编基础

汇编基础

字符串和数组

如果可以有效的处理字符串和数组,就能掌握代码优化中的最常见情况。研究表明,绝大多数程序用90%的运行时间执行其10%的代码。毫无疑问,这10%通常发生在循环中,而循环正是处理字符串和数组所要求的结构。本节以编写高效代码为目的,阐释字符串和数组的处理技术

Read more
汇编基础

汇编基础

64位编程

之前介绍的一直都是32位的程序,64位和32位有很多相似的地方,但仍有许多的不同:
比如64位MASM 11.0不支持INVOKE伪指令,而且不需要在程序前写出.model,.stack,.386的

寄存器

64位模式下,操作数的默认大小是32位,并且有8个通用的寄存器。但是给每条指令加上REX(寄存器扩展)前缀后,操作数也可达64位。通用寄存器的数量也增加到了16个:32位模式下的寄存器再加上8个有标号的寄存器,R8~R15

  • 64位模式下,单条指令不能同时访问寄存器的高字节,如AH,BH,CH以及新寄存器的低字节DIL
  • 64模式下,32位的EFLAGS被64位的RFLAGS取代。这两个寄存器共享低32位,而RFLAGS的高32位是不使用的
  • 32位和64位拥有相同的状态标志位
Read more
汇编实验