我正在使用 16 位 NASM 程序集,但存在无法构建代码的问题。错误发生在此处的所有 MOV 行上:
section .bss
x_coord RESB 8 ; [x_coord] is the head, [x_coord+2] is the next cell, etc.
y_coord RESB 8 ; Same here
pixel_x RESB 2 ; Storage for calculations
pixel_y RESB 2 ; Storage for calculations
...
MOV [pixel_x], [x_coord]
MOV [pixel_y], [y_coord]
CALL DrawPixel
MOV [pixel_x], [x_coord+2]
MOV [pixel_y], [y_coord+2]
CALL DrawPixel
MOV [pixel_x], [x_coord+4]
MOV [pixel_y], [y_coord+4]
CALL DrawPixel
MOV [pixel_x], [x_coord+6]
MOV [pixel_y], [y_coord+6]
CALL DrawPixel
Run Code Online (Sandbox Code Playgroud)
我读到这是因为汇编程序不知道变量的大小。我尝试MOV [pixel_x], byte …
我正在使用ffmpeg将视频转换为mp4格式.一切正常,除了MOV格式.
我用于一切的命令是:
ffmpeg -i input.mov -strict experimental -sameq -s vga -aspect 1.7777 -vcodec libx264 -preset fast -crf 22 -y output.mp4
但我一直得到的输出是:
ffmpeg version 0.9, Copyright (c) 2000-2011 the FFmpeg developers
built on Mar 12 2012 11:01:05 with gcc 4.4.5
configuration: --enable-libx264 --enable-gpl --disable-yasm
libavutil 51. 32. 0 / 51. 32. 0
libavcodec 53. 42. 0 / 53. 42. 0
libavformat 53. 24. 0 / 53. 24. 0
libavdevice 53. 4. 0 / 53. 4. 0
libavfilter 2. 53. 0 / …Run Code Online (Sandbox Code Playgroud) 我尝试了不同的方法,用Iphone在HTML5页面上显示.mov视频(在linux上的"ISO Media,Apple QuickTime电影"),但它无效.
我的代码是:
<video width="320" height="240">
<source src="test.mov">
</video>
Run Code Online (Sandbox Code Playgroud)
使用所有桌面浏览器(chrome,firefox ....),我可以显示视频.
任何的想法?
提前致谢.
在参考指南中,我看到MOV操作码是 88、89、8A 等。为什么一条指令有多个操作码?
我通过比较交流程序与其程序集等效来学习程序集.
这是代码.
.file "ex3.c"
.section .rodata
.LC0:
.string "I am %d years old.\n"
.LC1:
.string "I am %d inches tall.\n"
.text
.globl main
.type main, @function
main:
pushl %ebp //establish stack frame//
movl %esp, %ebp //move esp into ebp, all contents saved down stack//
andl $-16, %esp //16 from esp for local var space//
subl $32, %esp//stack frame reserving - 32 bytes//
movl $10, 24(%esp)
movl $72, 28(%esp)
movl 24(%esp), %eax
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call printf
movl …Run Code Online (Sandbox Code Playgroud) 我决定学习汇编编程语言.我正在使用这个.在底部练习它在一些指令中找到错误,其中之一是
mov cx, ch
Run Code Online (Sandbox Code Playgroud)
我在SO上发现了一些类似的问题,解释了如何实现它,但现在我想知道为什么禁止这个操作?
假设我在CH中有10d = 00001010b并且想要将其置于CL并同时擦除CH.mov cx, ch似乎这样做是因为它将10d显示为16bit 00000000 00001010并将其分别放入CH和CL(整个CX)
有什么问题,为什么给定的教程要求在这个表达式中找到错误?
我在《英特尔 64 位和 32 位架构软件开发人员手册》中遇到过这两条指令,我只是想知道两者之间的区别是什么,以及何时应该使用其中一个而不是另一个。
从英特尔软件开发人员手册(本文中称为ISDM)和x86指令集参考(我假设,它只是前者的副本),我们知道该mov指令可以将数据从eax/ax/al内存偏移量移动到反之亦然.
例如,mov moffs8, al将al寄存器的内容移动到某个8位的存储器偏移量moffs8.
现在,是什么 moffs8?引用ISDM(3.1.1.3):
moffs8,moffs16,moffs32,moffs64 - MOV指令的某些变体使用的字节,字或双字类型的简单存储器变量(存储器偏移).实际地址由相对于段基的简单偏移给出.指令中没有使用ModR/M字节.显示的数字
moffs表示其大小,该大小由指令的地址大小属性决定.
我强调句子说的moffs8是字节类型,大小是8位.
我是大会的初学者,所以,在读完之后,我立即开始mov moffs8, al使用NASM 的指令.这是我写的代码:
; File name: mov_8_bit_al.s
USE32
section .text
mov BYTE [data], al
section .bss
data resb 2
Run Code Online (Sandbox Code Playgroud)
这是nasm -f bin mov_8_bit_al.s产生的(十六进制):
A2 08 00 00 00
Run Code Online (Sandbox Code Playgroud)
以下是我对此的理解:
A2 是的操作码 MOV moffs8, AL08是内存偏移本身,大小为1个字节00 00 00 …我已经尝试了多个模块来播放来自 android 中的本机应用程序的 mov 视频。但没有一个奏效。任何的想法?
我正在学习MOV汇编中的数据移动()。
我尝试编译一些代码以查看 x86_64 Ubuntu 18.04 机器中的程序集:
typedef unsigned char src_t;
typedef xxx dst_t;
dst_t cast(src_t *sp, dst_t *dp) {
*dp = (dst_t)*sp;
return *dp;
}
Run Code Online (Sandbox Code Playgroud)
哪里。src_t unsigned char至于,dst_t我试过了char,,short和int。long结果如下所示:
// typedef unsigned char src_t;
// typedef char dst_t;
// movzbl (%rdi), %eax
// movb %al, (%rsi)
// typedef unsigned char src_t;
// typedef short dst_t;
// movzbl (%rdi), %eax
// movw %ax, (%rsi)
// typedef unsigned …Run Code Online (Sandbox Code Playgroud)