我有以下情况.
Data.Data.Data作为输入.诀窍是,所有这些程序集都是插件并动态加载.当然,F1和F2都引用D,但在运行时,所有三个都由主机应用程序加载.
现在如果有人用更新的版本替换D二进制文件会有什么变化呢?
我写了一个测试应用程序,它做了类似的事情,结果如下:
如果.NET跟踪接口调用,我很好.那是因为访问库中未更改的部分只会起作用,如果该部分发生变化,我只会告诉我一个例外.因此它将工作(在接口级别上)或不工作 - 没有未定义的行为.
我的问题:
我正在使用tasm编写程序集.我的任务是编写一个程序,使用冒泡排序按字母顺序对输入的字符串进行排序.防爆.如果你输入"你好",它应该写"ehllo".我已经写了乞求输入字符串并对它进行排序(我认为它工作直到它应该打印出结果的结尾,但最后它只是写了我的.data一次并完成它的工作)PS对不起英语
.model small
.stack 100h
.data
request db 'This program is using bubblesort to get alphabetical order of your enterd string', 0Dh, 0Ah, 'Enter your string:', 0Dh, 0Ah, '$'
result db 0Dh, 0Ah, 'Result:', 0Dh, 0Ah, '$'
buffer db 100, ?, 100 dup (0)
.code
start:
MOV ax, @data
MOV ds, ax
MOV ah, 09h
MOV dx, offset request
int 21h
MOV dx, offset buffer
MOV ah, 0Ah
INT 21h
MOV si, offset buffer
INC si
MOV bh, [si]
INC …Run Code Online (Sandbox Code Playgroud) 我正在使用MASM 14.0进行组装,我对以下代码的输出感到困惑.
TITLE Exercise 4 from chapter 4
; Author : Saad Ahmed
INCLUDE Irvine32.inc
.code
main PROC
mov eax, 0
mov al, 255
add al, 1
call DumpRegs ; Display registers
mov al, 127
add al, 1
call DumpRegs ; Display registers
exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
两个算术运算都在无符号整数255和127上完成.
但是,CPU将第一个操作255视为无符号整数并设置进位标志,当您将1添加到无符号255时会发生这种情况.
完整的状态标志是CF = 1 SF = 0 ZF = 1 OF = 0 AF = 1 PF = 1,eax为0
但是,第二个操作将127视为有符号整数,因为它设置了溢出标志,如果你将1加到+127就会发生这种情况.
完整的状态标志为CF = 0 SF = 1 ZF = 0 OF = …
我对以下代码有问题。
extern printf
global _main
main:
push msg
call printf
ret
msg db "Hello world",0
Run Code Online (Sandbox Code Playgroud)
我使用 NASM 组装它,nasm -fwin32 test.asm然后使用 链接它ld test.obj。它告诉我“ test.obj:test.asm:(text+0x6): undefined reference to 'printf'”
如何将我的文件链接到标准 C 库?我有最新的 MinGW 的 ld。
我想同时运行多个laravel框架工作项目.究竟该怎么做我不知道.
我使用了一个命令:php artisan serv --port = 8080,在端口8080上运行另一个项目.当我在cmd中使用此命令时,它显示错误:

我创建了以下程序来读取5个数字,然后dumpreg查看输入的数字...
INCLUDE Irvine32.inc
.data
count = 5
scores WORD count DUP(? )
prompt BYTE "Please type an integer score: ", 0
.code
GetScores PROTO, wArray:PTR WORD, arraySize : WORD
main proc
INVOKE GetScores,OFFSET scores, count
mov esi, OFFSET scores
mov ecx, count
mov ebx, 2
call DumpMem
mov eax, 50000
call Delay
exit
main endp
GetScores PROC, wArray:PTR WORD, arraySize : WORD
push ebp
mov ebp, esp
pushad
mov esi, wArray
movzx ecx, arraySize
cmp ecx, 0; ECX …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用k1om-mpss-linux-gcc编译器为Xeon Phi平台编写一些带有KNC指令的内联汇编代码.我想在我的代码中使用掩码寄存器来向量化我的计算.这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <assert.h>
#include <stdint.h>
void* aligned_malloc(size_t size, size_t alignment) {
uintptr_t r = (uintptr_t)malloc(size + --alignment + sizeof(uintptr_t));
uintptr_t t = r + sizeof(uintptr_t);
uintptr_t o =(t + alignment) & ~(uintptr_t)alignment;
if (!r) return NULL;
((uintptr_t*)o)[-1] = r;
return (void*)o;
}
int main(int argc, char* argv[])
{
const int vectorSize = 16;
int * n_arr = (int *) aligned_malloc(16 * sizeof(int),64);
int * lenS_arr = (int *) aligned_malloc(16 …Run Code Online (Sandbox Code Playgroud) 我需要将此C代码转换为汇编语言代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int answer, i;
int right, wrong;
right = 0;
wrong = 0;
for(i =1; i < 11; i = i+1){
printf("What is %d + %d? ", i,i);
scanf( "%d", &answer);
if(answer == i + 1) {
printf("right! ");
right++;
}
else {
printf("Sorry, you're wrong. ");
printf("The answer is %d. ", i + 1);
wrong++;
}
}
printf("You got %d right and %d wrong. ", right, wrong );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我真的只需要知道如何将变量与汇编语言中的字符串组合在一起,就像上面的C代码一样.我想我可以处理其他一切.有人可以告诉我.我是否必须使用某种参考[]. …
我正在我的大学学习汇编语言,并获得了包含MASM 615的CD,并且正在使用Irvine32包含库。一切都可以在学校计算机上正常运行,但是当我尝试在家用计算机上编译并运行相同的代码时,出现链接错误。
INCLUDE Irvine32.inc
.code
main PROC
mov eax,10000h ; EAX = 10000h
add eax,40000h ; EAX = 50000h
sub eax,20000h ; EAX = 30000h
call DumpRegs
exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
该代码在学校的PC上运行良好。在家里,我进入DOS,将路径设置为MASM文件夹,然后执行Make32文件。
这是我得到的错误:
LINK32 : error LNK2001: unresolved external symbol _mainCRTStartup
test.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)
该程序进行编译(我得到了.lst,.obj和.pdb文件),仅此而已。我想这是因为我家里有一个64位操作系统,但是我不知道如何在64位环境中启动和运行它-CD或本书在64位系统上没有任何内容。只有一个make16或make32 .bat文件。这真是个无赖,因为这意味着除非有工作要做,否则我不能在家做任何工作?
我想通过阅读CodeProject上的文章使用C和GCC AT&T风格的内联汇编少量这里.我希望这样做的主要原因是找到EIP寄存器的旧值,以便能够在我的代码中拥有可靠的指令地址.我写了一个简单的示例程序来证明我对此概念的理解:
#include <stdio.h>
#include <stdlib.h>
int mainReturnAddress = 0;
int main()
{
asm volatile (
"popl %%eax;"
"pushl %%eax;"
"movl %%eax, %0;"
: "=r" ( mainReturnAddress )
);
printf( "Address : %d\n", mainReturnAddress );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此特定示例的目的是从堆栈顶部弹出4个字节,表示从EIP寄存器保存的32位返回地址,然后将其推回堆栈.然后,我将它存储在全局mainReturnAddress变量中.最后,我打印存储在mainReturnAddress中的值.
我的输出来自此代码4200560.
这段代码是否达到了上述目的,这是Windows平台上32位的跨处理器吗?