目前我正在学习x86组装以获得乐趣,我喜欢微控制器编程,所以我熟悉汇编.
目前我一直在寻找这个问题的答案的高低,但似乎无法找到它...... DS寄存器,我知道它应该指向我程序中的全局数据,但我不知道知道它是如何工作的.我正在使用NASM,在大多数简单的程序中,我看到以下内容:
[org 0x7C00] [bits 16] main: mov ax, 0x0000 mov ds, ax mov al, [msg] mov ah, 0x0E mov bx, 0x0007 int 0x10 jmp $ msg db 'X' times 510-($-$$) db 0 dw 0xAA55
并且它完美地工作(即使我省略了粗体代码),但是如何?CPU是否自动加载从0x0000开始的全局变量?或者我有什么内在的东西,我错过了?
我已经开始关注c编程了,虽然我不是一个完整的初学者(我对Java和Web开发有所了解)但有很多我不理解的东西.
我的问题是关于何时首次将程序加载到内存中.我无法理解这里发生的事情.
程序启动时是将所有程序代码加载到内存中还是只加载了所需的程序代码?
在此过程中,当程序运行时,当进程获得CPU时间或加载的代码保留在内存中时,此代码/指令集是否会交换进出物理磁盘?
如果两个进程可以共享相同的指令集,这是否意味着每个进程都有它的虚拟内存空间,一个独立的代码段?
我很抱歉,如果我的问题基本或措辞不好,但我上周才开始看这个问题,经过一个周末的阅读后,我有更多的问题而不是答案!
我为选择性别创建了一个细分选择器,在该细分选择器中,我必须为男性选择一个,为女性选择另一个。选择器工作正常但使用选择器设置标题 it\xe2\x80\x99s 未显示。我设置了标题“选择性别”,但它没有在选取器上显示为标题。
\n\nstruct ManagerChildrenView: View {\n\n //MARK: Properties\n @State var selectedGender = 0\n let genders = ["Male", "Female"]\n\n var body: some View {\n\n Form{\n Section{\n Picker("Select Gender", selection: $selectedGender) {\n\n ForEach(0..<genders.count) { index in\n Text(self.genders[index]).tag(index).font(.title)\n }\n }.pickerStyle(SegmentedPickerStyle())\n }\n }\n }\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n截屏:
\n\n\n我正在努力转换与gnu工具链的ld链接的C程序,以使其作为visual-studio(2005)项目进行编译.该程序将.data-symbols放在不同的段中,在初始化阶段,它在段之间复制数据.指向段开头和结尾的指针在ld链接描述文件中定义.
我理解如何将变量定位到不同的,用户定义的段中,但我还没有弄清楚如何定义链接器常量,如_start_of_my_segment,或者是否有类似于Visual Studio中的链接描述文件.
我的目标是能够编译程序,最好不要修改引用链接器定义符号的源代码,而是使用我自己的Visual Studio项目中数据的自定义布局.
下面是一些示例C代码,它说明了我想要做什么以及与gcc/ld链接时使用的make脚本的一个(精简的,可能是语法错误的)版本.
任何提示将不胜感激!
#pragma data_seg( "MY_DATA_FOO" )
#pragma data_seg( "MY_DATA_BAR" )
#pragma comment(linker, "/section:MY_DATA_BAR,R")
__declspec(allocate("MY_DATA_FOO")) int foo1;
__declspec(allocate("MY_DATA_FOO")) int foo2;
__declspec(allocate("MY_DATA_BAR")) int bar1 = 1;
__declspec(allocate("MY_DATA_BAR")) int bar2 = 2;
#pragma data_seg( )
void test() {
foo1 = bar1;
foo2 = bar2;
// i would rather do this as
//extern unsigned int __start_of_MY_DATA_FOO;
//extern unsigned int __start_of_MY_DATA_BAR;
//extern unsigned int __size_of_MY_DATA_BAR;
//memcpy(__start_of_MY_DATA_FOO, _start_of_MY_DATA_BAR, _size_of_MY_DATA_BAR);
}
Run Code Online (Sandbox Code Playgroud)
伪链接脚本(Visual Studio的等价物)
MEMORY
{
foo: org=0x1000, len=0x100
bar: org=0x2000, len=0x100
} …
Run Code Online (Sandbox Code Playgroud) 除了在运行时提供加载/卸载方法或函数的能力的Dll概念之外,我想知道编译器是否会说出类似的东西,好吧,因为代码段的这个特定部分占用了相当大的空间并且是在程序执行过程中,在此之后永远不会再次使用,在程序执行期间到达该特定点之后生成一些代码来卸载代码段的那部分是很好的,这样代码段占用的整体空间就会变小.它是虚构的还是可能发生的?
我正在开发一个Android应用程序,可以下载几个并行段的文件.我把它们分开了,现在我想把它们加在一起.
为了更清楚,我将通过一个简单的例子向您展示.假设我下载了4个段中的100kb文件.第一段为0kb至25kb,第二段为25kb至50kb,第三段为50kb至75kb,最后一段为75kb至100kb.文件类型可以是mp3,avi等.
现在我需要加入它们,以便这些段(文件部分)成为一个文件.我希望你能帮助我.谢谢你的时间!
编辑:例如它更像是分段的avi(xxx.avi.001,xxx.avi.002,xxx.avi.003)文件,我们有时会下载到我们的PC并使用HJSplit将文件加入到一个文件中.
我试图使用ionic2中的段进行水平滚动.这是代码:
home.ts:
<ion-scroll scrollX="true" style="width:100vw;height:350px" >
<ion-segment [(ngModel)]="relationship" color="primary">
<ion-segment-button value="friends" (ionSelect)="selectedFriends()">
Friends
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
<ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
Enemies
</ion-segment-button>
</ion-segment>
</ion-scroll>
Run Code Online (Sandbox Code Playgroud)
根据这个文件,我使用离子段外的离子滚动,所以我得到这样的UI.
如何根据名称的长度显示我的名字,并仅显示3到4个名称.用户滚动后,应逐个显示下一个名称.
简单的C文件:
#include <stdio.h>
int main(){
printf("Hello World");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译代码后,使用readelf -a a.out
,精灵信息如下:
问题:
我对 stack segment (ss) 和 stack pointer (sp) registers 有点困惑。当堆栈为空时,sp 值是否等于 ss 值?我读到当我们将一个字(2 字节)推入堆栈时,sp 减 2,如果第一条语句为真(sp=ss),那么我可以说如果堆栈不为空,堆栈指针的值总是较小或等于堆栈段的值是真的吗??。如果我们影响 sp 的值使其大于 ss 会发生什么?即:mov ss,200h mov sp,400h mov ax,1010h push ax
请纠正任何错误,提前thanx
我想使用 FFmpeg 将音频文件分割成几个等长的片段。我想指定一般片段持续时间(无重叠),并且我希望 FFmpeg 渲染尽可能多的片段来遍历整个音频文件(换句话说,要渲染的片段数量未指定)。另外,由于我对 FFmpeg 的经验不是很丰富(我只用它来进行带有很少参数的简单文件转换),所以我想要一个您应该用来执行此操作的代码的描述,而不仅仅是我赢得的一段代码不一定懂,如果可以的话。先感谢您。
PS 以下是我尝试这样做的背景:我想自动将一首歌曲采样到单小节循环中,而不是使用 DAW 手动将它们切碎。我想做的就是将歌曲的第一个节拍与 DAW 中的节拍网格对齐,然后导出该音频文件并使用它在 FFmpeg 中生成单小节循环。
将来,我将尝试做一些类似于批处理命令的事情,其中可以指定速度和调号,并且它将使用 FFmpeg 自动生成循环(只要循环与节拍网格对齐,就像我'前面已经提到过)。