当然,MOV“移动”(实际上是复制的)某物,但如何?它是将源的实际值放入目的地,还是放置某种地址。
当我在Jeff介绍的汇编书中看到他正在使用Linux的中断80h时,我就想到了这个问题:
mov eax,4 ; Specify sys_write call
mov ebx,1 ; Specify File Descriptor 1: Standard output
mov ecx,Buff ; Pass address of the character to write
mov edx,1 ; Pass number of chars to write
int 80h
我试图赋值变量注册这里是代码:
ORG 100h
var1 DB 10 ;
var2 DB 20 ;
MOV BX,var1 ; error : operands do not match: 16 bit register and 8 bit address
RET
END
但是,如果将第4行替换为:
MOV BL, var1;
它起作用了。所以我的问题是为什么不能将8位变量移动到大得多的16位寄存器中?
我已经提到了,和 OP,但是它没有回答我的问题。
注:
我正在使用emu8086汇编程序
我不懂汇编语言,所以如
我对程序集编程(x86 32位体系结构)很陌生,并对以下代码有一个问题:
SECTION .data
Msg: db "Hello", 10
Len: equ $-Msg
SECTION .text
global _start
_start:
; Printing Msg to stdout
mov eax, 4
mov ebx, 1
mov ecx, Msg ; Passing the ADDRESS to the beginning of what's stored in Msg
mov edx, Len ; Ar
我想学习asm,来自C。
一本书建议尝试实现这个算法,这是一个相当简单的排序算法。
begin
for i = 0 to len-1
small = arr(i)
index = i
for j = i to len-1
if ( arr(j) < small ) then
small = arr(j)
index = j
end_if
end_for
arr(index) = arr(i)
arr(i) = sm
这是我编写的代码的一部分:
section .data
name db 'slm dada',0xa
lenname equ $-name
nane db 'bye '
section .text
global _start
_start:
mov edx, lenname
mov ecx, name
mov ebx, 1
mov eax, 4
int 80h
mov eax, [nane] <- My questions are about
mov [name], dword eax <- these 2 lines
我正在尝试从编写引导加载程序。编写的代码是
BITS 16
start:
mov ax, 07C0h ; Set up 4K stack space after this bootloader
add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096
mov ax, 07C0h ; Set data segment to where we're loaded
mov ds, ax
mov si, t