I read that in C++17 we can initialize variables in if statements like this
if (int length = 2; length == 2)
//execute something
Run Code Online (Sandbox Code Playgroud)
Instead of
int length = 2;
if (length == 2)
//do something
Run Code Online (Sandbox Code Playgroud)
Even though it is shorter, it affects the code readability (especially for people who don't know this new feature), which I suppose is a bad coding practice for large software development.
除了使代码更短之外,使用此功能还有什么好处?
CPU如何区分CALL rel16(E8 cw)和CALL rel32(E8 cd)?
根据这个网站,镜像英特尔架构手册,为操作码CALL rel16和CALL rel32是E8 cw和E8 cd分别.
这让我很奇怪,CPU如何区分这些操作码,因为它E8 cw可能是一个前缀E8 cw?
我发现 和 都mul可以imul用来将有符号数乘以无符号数。
例如:
global _start
section .data
byteVariable DB -5
section .text
_start:
mov al, 2
imul BYTE [byteVariable]
Run Code Online (Sandbox Code Playgroud)
可以用 替换imul,mul结果还是一样(-10)。
将有符号数与无符号mul数相乘时和imul完全相同,还是有区别?
我是汇编语言的绿手.这些天我用bochs来模拟虚拟软盘的启动过程.但我不知道的一件事CS是系统初始化时寄存器值是什么.
;; init registers
org 0x7c00
BaseOfStack equ 0x7c00
Label_Start:
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, BaseOfStack
;; clear screen
mov ax, 0600h
mov bx, 0700h
mov cx, 0
mov dx, 0184h
int 10h
Run Code Online (Sandbox Code Playgroud)
上面的代码只是其中的一部分.ORG执行命令时,指令的CS寄存器值是多少mov ax, cs.它与0x7c00相同吗?谢谢.
下面是bochsrc配置:
romimage: file="$BXSHARE/BIOS-bochs-latest"
vgaromimage: file="$BXSHARE/VGABIOS-lgpl-latest"
boot: floppy
floppy_bootsig_check: disabled=0
floppya: type=1_44, 1_44="myboot.img", status=inserted
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=15
cpu: ips=15000000
log: bochsout.txt
mouse: enabled=0 …Run Code Online (Sandbox Code Playgroud) 开始自学组装(NASM)我想知道如何划分2个数字(例如在Windows上).
我的代码看起来像这样,但它崩溃了.
global _main
extern _printf
section .text
_main:
mov eax, 250
mov ebx, 25
div ebx
push ebx
push message
call _printf
add esp , 8
ret
message db "Value is = %d", 10 , 0
Run Code Online (Sandbox Code Playgroud)
我想知道什么是真的错了?它甚至不显示除法后的值.
我已经在程序集8086中创建了“愤怒的小鸟”游戏。我现在的主要问题是我想在主循环运行时播放游戏的歌曲。我已经写了音乐代码。我考虑过使用多线程,但发现用于创建线程的程序集中断仅适用于cmd,不适用于DOSBox。
但是,我发现执行多线程的另一种方法是从C ++ Windows.h文件调用一个创建线程的命令。那太复杂了。
现在,我设法使用中断14h通过LAN端口发送消息,从而在两个不同的DOSBox窗口之间进行通信。基本上,我已经为音乐编写了单独的代码。这两个代码都运行,并且只有当音乐代码获得符号时,它才开始播放音乐。
但是,我发现打开两个DOSBox窗口时,只有主要的声音起作用。您必须切换窗口才能收听音乐,这意味着您听不到声音。
有没有人知道如何解决这个问题,或者在主循环运行时播放音乐?
谢谢
我想问一下CMPXCHG在8位内存字段上使用指令是否比在32位字段上使用指令更糟糕。
我正在使用C11 stdatomic.h来实现一些同步方法。
根据 Agner 的指令表,单个 fp 除法比单个倒数操作和单个乘法操作慢。(这在所测量的 x86 架构中似乎很常见)
这是打桩机架构表的摘录。
MULSS MULSD x,x/m 1 5-6 0.5 P01 fma
MULPS MULPD x,x/m 1 5-6 0.5 P01 fma
VMULPS VMULPD y,y,y/m 2 5-6 1 P01 fma
DIVSS DIVPS x,x/m 1 9-24 5-10 P01 fp
VDIVPS y,y,y/m 2 9-24 9-20 P01 fp
DIVSD DIVPD x,x/m 1 9-27 5-10 P01 fp
VDIVPD y,y,y/m 2 9-27 9-18 P01 fp
RCPSS/PS x,x/m 1 5 1 P01 fp
Run Code Online (Sandbox Code Playgroud)
第四个值是延迟。因此,乘法运算需要 5-6 个周期,除法运算需要 9-24 个周期,而倒数运算则需要 5 个周期。由于 24 > …
我正在学习汇编语言.
在Microsoft Visual Studio 2017中,我想检查寄存器标志的当前状态.
我想知道每个寄存器标志的缩写代表什么,所以我在x86寄存器标志上查看wiki页面.
但正如您所看到的,Visual Studio中显示的寄存器标志缩写与Wiki页面中的缩写不匹配.
对于visual studio中的注册标志,我如何找出它们代表什么?
我有一个 .ASM 文件,我想在其中调用另一个 .ASM 或 .INC 文件中的过程。
我尝试将以下内容写入我的main.asm文件中:
INCLUDE file_op.inc
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试运行它时,它只是说:
“模拟器已停止。”
当它第一次遇到另一个文件中指定的过程时,它会执行此操作。
另一个 .INC 文件中的过程是:
; A function to open a file using its name and remember its file_handle
open_file proc
mov ax, 3d00h ; System call to open a file
lea dx, file_name ; name of the file we are opening
int 21h ; system interrupt
mov file_handle, ax ; remember file_handle!!
ret
endp
; A function to read from a file byte by byte using …Run Code Online (Sandbox Code Playgroud)