如果部分汇编代码如下:
xor %ebp,%ebx
jle some address
Run Code Online (Sandbox Code Playgroud)
这个 jle 是否意味着它会在 (%ebx ^ %ebp == 0) 时跳转,因为这会将 ZF 设置为 1?
在我的汇编语言类中,我们的第一个任务是编写一个程序,在DOS中打印出一个简单的以美元结尾的字符串.它看起来像这样:
BITS 32
global _main
section .data
msg db "Hello, world!", 13, 10, ’$’
section .text
_main:
mov ah, 9
mov edx, msg
int 21h
ret
Run Code Online (Sandbox Code Playgroud)
据我了解,$符号用来像空确实在C.但是,我该怎么办,如果我想要把一个美元符号字符串中终止刺(像我想打印出"它的成本$ 30")?这似乎是一个简单的问题,但我的教授不知道答案,我似乎没有使用谷歌搜索找到它.
我正在尝试编写一个执行fork()系统调用的程序,并且子/父项分别写入不同的字符串和exit(0).
问题是 - 虽然fork()成功了(因为我看到了 2 行输出),但由于某种原因,父进程和子进程都输出了父字符串。
这是代码:
BITS 64
section .data
msg1: db "Hello from child", 0x0a
len1: equ $-msg1
msg2: db "Hello from parent", 0x0a
len2: equ $-msg2
section .text
global start
start:
xor rax,rax
mov rax,0x2000002 ; fork() syscall
syscall
test eax,eax
jne flow_parent
mov rax, 0x2000004 ; SYS_write
mov rdi, 1 ; stdout
mov rsi, msg1
mov rdx, len1
syscall
xor rdi,rdi
mov rax,0x2000001
syscall
flow_parent:
mov rax, 0x2000004 ; SYS_write …Run Code Online (Sandbox Code Playgroud) 我有两个问题.第一个:'或'与'cmp'有什么区别?我已经看过了两个,看起来他们做了同样的事情.我的第二个问题:做什么
or al, al
Run Code Online (Sandbox Code Playgroud)
意思?它不应该一直返回真(如x == x)吗?
我正在尝试检查x86_64汇编代码中的值是否为零.我知道这通常包含一个cmp变体后跟一个jmp变体,但我不确定使用的确切说明.
我正在执行 x86 汇编代码,并且不断收到此错误:`cmp's 的操作数类型不匹配
它出现的代码行是:
cmpb %rdi, $0
Run Code Online (Sandbox Code Playgroud) 我见过
和
使用 DOS 在 Fasm 中将 hello,world 写入控制台
我已经尝试/看到了像这个答案中的 MASM 示例的代码
;---ASM Hello World Win64 MessageBox
extrn MessageBoxA: PROC
extrn ExitProcess: PROC
.data
title db 'Win64', 0
msg db 'Hello World!', 0
.code
main proc
sub rsp, 28h
mov rcx, 0 ; hWnd = HWND_DESKTOP
lea rdx, msg ; LPCSTR lpText
lea r8, title ; LPCSTR lpCaption
mov r9d, 0 ; uType = MB_OK
call MessageBoxA
add rsp, 28h
mov ecx, eax ; uExitCode = …Run Code Online (Sandbox Code Playgroud) 我计划将X变量转换为十进制.我很难使用turbo汇编程序,你能帮忙吗?
code segment ;inicio de un segmento unico
assume cs:code,ds:code,ss:code
org 100h ;localidad de inicio del contador
main proc ;procedimiento principal
mov ax,cs
mov ds,ax ; INICIO
mov ax, x
mov ah,4ch ;comienzo del fin de programa
int 21h ;fin del programa
main endp
x dw 0A92FH
code ends ; fin del segmento de codigo
end main ;fin del ensamble
Run Code Online (Sandbox Code Playgroud)
非常感谢
因此,此插入排序是用x86编写的,但嵌入在C中。它还具有一个标志,在对数组的一半进行排序后,我们将其设置为保留。有什么办法可以提高性能?
void asmInsSort(int *list, int arrayLen, int halfpoint) {
_asm
{
mov ecx, arrayLen
mov esi, list
mov ebx, halfpoint
mov eax, 0
more:
cmp ecx, 0 // Compare current arrayLen w/ 0
je done // If it is equal, we are done
mov edi, eax //J = I
push eax //push eax (i) to free up register for key
mov eax, [esi + edi] //Key = Array[i] technically j
sub edi, 4 //J - 1
mov edx, arrayLen //K …Run Code Online (Sandbox Code Playgroud) x86 assembly inline-assembly micro-optimization insertion-sort
我正在尝试混合汇编(x86)和C++。我用汇编语言编写了一个过程,然后从 C++ 中调用它。
但是,当将返回值写入局部变量时,我收到写入权限冲突错误。
#include <iostream>
// will return 1 if all ok and 0 if b is 0
extern "C" int integerMulDiv(int a, int b, int* prod, int* quo, int* rem);
int main() {
int a = 13, b = 4;
int p, q, r;
int res = integerMulDiv(a, b, &p, &q, &r);
std::cout << p << '\t' << q << '\t' << r << std::endl;
std::cout << res << std::endl << std::endl;
res = integerMulDiv(31, 0, …Run Code Online (Sandbox Code Playgroud)