我真的很想学习装配.我非常擅长c/c ++,但希望更好地了解较低级别的内容.
我意识到之前已经提出了与装配相关的问题,但我只是在寻找一些特定于我的情况的方向:
我正在运行Windows 7,我对如何开始使用汇编感到困惑.我是否必须从x64开始,因为我正在运行Windows 7?有些人说"先从32位开始" - 我该如何做呢?我的操作系统与我为'32'或'64'位写入汇编的能力有什么关系.事实上,'n位'汇编意味着什么,其中n是一个数字?
编辑:
以下是一些帮助我开始组装的链接; 刚刚入门的其他人可能会发现它们很有帮助.随着我继续组装之旅,我将继续更新此列表:)
注意:正如我一直在学习的那样,我决定专注于使用masm32进行编程.因此,以下大多数资源都集中于此.
Agner Fog的软件优化资源,包括在不同平台(Windows与Linux/OS X)上调用约定的一些好东西,以及如何有效地执行特定事务的大量示例.不适合初学者,但对于中级到高级读者来说非常棒.
(他还为英特尔和AMD CPU的每条指令提供了详细的性能信息,非常适合严格的性能微优化.一些初学者可能想要了解其中的一些内容,开始考虑CPU的工作原理,以及为什么你可以做一些事情方式而不是另一种方式.)
我在工具栏中使用FAB快速拨号.但是我无法将它浮动到工具栏的右侧.我试过风格:"浮动:正确"没有运气.还尝试了flex offset ="55",但是在调整窗口大小时这不起作用.基本上无论窗口大小如何,我都希望按钮位于蓝色工具栏容器内的最右侧.任何有关这方面的帮助将受到高度赞赏.见下面的照片和代码:
<md-toolbar layout-fill layout-padding layout="row" style="background-color: #3F51B5;color:white;text-align:text-center;">
<div layout="row">
<i class="fa fa-users fa-2x" flex></i>
<h1 class="md-title" style="color:white">Org Chart</h1>
</div>
<div class="lock-size" flex offset="55">
<md-fab-speed-dial md-direction="left" ng-class="md-fling">
<md-fab-trigger>
<md-button aria-label="menu" class="md-fab md-accent">
<md-tooltip>
Actions
</md-tooltip>
<md-icon md-svg-src="img/icons/ic_view_module_48px.svg"></md-icon>
</md-button>
</md-fab-trigger>
<md-fab-actions>
<md-button aria-label="view" class="md-fab md-raised md-mini" >
<md-tooltip>
View Chart
</md-tooltip>
<md-icon md-svg-src="" style="color:black" ng-show="cDP.read" ng-click="paneShowFn('read')"></md-icon>
</md-button>
<md-button aria-label="add" class="md-fab md-raised md-mini" >
<md-tooltip>
Add Chart
</md-tooltip>
<md-icon md-svg-src="img/icons/ic_add_48px.svg" style="color:black" ng-show="cDP.insert" ng-click="paneShowFn('insert')"></md-icon>
</md-button>
<md-button aria-label="Settings" class="md-fab md-raised md-mini" >
<md-tooltip> …Run Code Online (Sandbox Code Playgroud) 我希望能够在我的包中有两个"受保护"类.也就是说,我不希望我的包外的文件看到它们是可见的 - 它们仅供包内部使用.
我怎样才能做到这一点?
我已经设置了一个抽象的父类,以及一个扩展它的具体类.为什么父类不能调用抽象函数?
//foo.php
<?php
abstract class AbstractFoo{
abstract public static function foo();
public static function getFoo(){
return self::foo();//line 5
}
}
class ConcreteFoo extends AbstractFoo{
public static function foo(){
return "bar";
}
}
echo ConcreteFoo::getFoo();
?>
Run Code Online (Sandbox Code Playgroud)
错误:
致命错误:无法 在第5行的foo.php中调用抽象方法AbstractFoo :: foo()
所以今天早上我发布了一个关于汇编的混乱问题,我收到了一些非常真实的帮助,我非常感谢.
现在我开始进入组装,并开始了解它是如何工作的.
我觉得我理解的事情包括堆栈,中断,二进制/十六进制,以及一般大多数基本操作(jmp,push,mov等).
我正在努力理解并希望得到帮助的概念如下:如果您能解决以下任何问题,那将是一个巨大的帮助:
一些信息:我使用masm32和WinAsm作为IDE,我正在使用Windows 7.我有很多以前使用c ++/java等高级语言编程的经验.
编辑:感谢大家的帮助,照常提供非常丰富的信息!好东西!最后一件事 - 我想知道堆栈指针和Base指针,ESP和EBP之间有什么区别.有人可以帮我吗?
编辑:我想我现在得到它...... ESP总是指向堆栈的顶部.但是,您可以根据需要指定EBP.ESP会自动处理,但您可以使用EBP做任何您想做的事情.例如:
push 6
push 5
push 4
mov EBP, ESP
push 3
push 2
Run Code Online (Sandbox Code Playgroud)
在这种情况下,EBP现在指向持有4的地址,但ESP现在指向持有2的地址.
在实际应用中,6,5和4可以是函数参数,而3和2可以是该函数内的局部变量.
所以...我是计划r6rs的新手,我正在学习宏.有人可以向我解释"卫生"是什么意思吗?
提前致谢.
我正在学习计划.我知道如何使用lambda和let表达式.
然而,我正在努力弄清楚使用lambda的重点是什么.你不能用lambda做你能做的一切吗?
看一个lambda表达式是比let更好的选择的例子会特别有用.
还有一件事 - 是否还有让let比lambda更有用的情况?如果是这样的例子也会很好.
编辑:我也对对比定义和lambda感兴趣,因为它们似乎执行类似的任务.
感谢大家的帮助.在阅读了你的答案之后,我做了一些更多的研究lambda/let/define,现在对它的了解要好得多.
我来自一个很酷的lambda用法的好例子 - 从程序中返回匿名函数.例如,operateTwice下面的过程返回一个匿名函数,该函数基于传递给过程的参数:
(define operateTwice
(lambda (op1 op2)
(lambda (x y)
(op2 (op1 x y) y))))
((operateTwice * +) 2 3) ;equivalent to: (+ (* 2 3) 3), or in standard notation 2*3+3
Run Code Online (Sandbox Code Playgroud)
输出:
9
Run Code Online (Sandbox Code Playgroud) 使用bash,如何在目录中递归包含的所有文件名(包括文件夹)中搜索所有出现的子字符串'foo',并用'bar'替换它们?
例如,如果当前结构如下所示:
-foo_test
- fooo.txt
- xfoo
- yfoo.h
- 1foo.c
Run Code Online (Sandbox Code Playgroud)
运行bash脚本后它应该如下所示:
-bar_test
- baro.txt
- xbar
- ybar.h
- 1bar.c
Run Code Online (Sandbox Code Playgroud) 我需要将二进制数据传递给接受命令行参数的bash程序.有没有办法做到这一点?
这是一个接受一个参数的程序:
script arg1
Run Code Online (Sandbox Code Playgroud)
但是arg1,我想传递一些不是很好的ASCII字符的字节0x02,而不是字符串,特别是字节0xc5和0xd8.
我该怎么做呢?
我正在创建一个双链表,并重载了operator =使列表上的另一个相等:
template<class T>
void operator=(const list<T>& lst)
{
clear();
copy(lst);
return;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时出现此错误:
container_def.h(74) : error C2801: 'operator =' must be a non-static member
Run Code Online (Sandbox Code Playgroud)
此外,如果有帮助,第74行是定义的最后一行,带有"}".