Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 学习汇编,代码有问题吗?_Assembly_Nasm - Fatal编程技术网

Assembly 学习汇编,代码有问题吗?

Assembly 学习汇编,代码有问题吗?,assembly,nasm,Assembly,Nasm,根据您的NASM,在确定引用的内存大小时可能存在问题: 通常,内存引用的大小可以通过正在移动的寄存器来推断。例如,mov[rax],ecx是32位的移动,因为ecx是32位的。YASM目前给出了一个不明显的操作码和操作数组合无效错误,如果它不能计算出您移动了多少内存。本例中的修复方法是添加内存大小说明符:qword、dword、word或byte 下面是一个64位内存移动,它设置从rax开始的8个字节: mov-qword[rax],1 这是一个32位内存移动,设置了4个字节: 莫夫·德沃德[r

根据您的NASM,在确定引用的内存大小时可能存在问题:

通常,内存引用的大小可以通过正在移动的寄存器来推断。例如,mov[rax],ecx是32位的移动,因为ecx是32位的。YASM目前给出了一个不明显的操作码和操作数组合无效错误,如果它不能计算出您移动了多少内存。本例中的修复方法是添加内存大小说明符:qword、dword、word或byte

下面是一个64位内存移动,它设置从rax开始的8个字节: mov-qword[rax],1

这是一个32位内存移动,设置了4个字节: 莫夫·德沃德[rax],1

这是一个16位内存移动,设置2个字节: mov单词[rax],1

这是一个8位内存移动,设置1个字节: mov字节[rax],1

根据您的NASM,在确定引用的内存大小时可能存在问题:

通常,内存引用的大小可以通过正在移动的寄存器来推断。例如,mov[rax],ecx是32位的移动,因为ecx是32位的。YASM目前给出了一个不明显的操作码和操作数组合无效错误,如果它不能计算出您移动了多少内存。本例中的修复方法是添加内存大小说明符:qword、dword、word或byte

下面是一个64位内存移动,它设置从rax开始的8个字节: mov-qword[rax],1

这是一个32位内存移动,设置了4个字节: 莫夫·德沃德[rax],1

这是一个16位内存移动,设置2个字节: mov单词[rax],1

这是一个8位内存移动,设置1个字节: mov字节[rax],1


关于第14行的问题,请参见tanascius的答案。你需要电影,这里是word[startaddr]


第20行和第28行有一个共同的问题。Nasm需要语法mov[es:di],al。不需要大小前缀-它隐含在寄存器操作数中。

有关第14行的问题,请参阅tanascius的答案。你需要电影,这里是word[startaddr]


第20行和第28行有一个共同的问题。Nasm需要语法mov[es:di],al。不需要大小前缀-它隐含在寄存器操作数中。

如果突出显示有错误的行就好了如果突出显示有错误的行就好了
    jmp start
;==============================
;  Draws a horiz and vert line
;==============================
  startaddr dw 0a000h ;start of video memory
  colour db 1
;==============================
 start:
   mov ah,00
   mov al,19
   int 10h   ;switch to 320x200 mode
 ;=============================
 horiz:
   mov es, startaddr  ;put segment address in es ; <--- Error Line 14
   mov di, 32000  ;row 101 (320 * 100)
   add di, 75   ;column 76
   mov al,colour  ;cannot do mem-mem copy so use reg
   mov cx, 160   ;loop counter
  hplot:
    mov es:[di],al  ;set pixel to colour ; <--- Error
    inc di   ;move to next pixel
  loop hplot
 vert:
   mov di, 16000  ;row 51 (320 * 50)
   add di, 160   ;column 161
   mov cx, 100   ;loop counter
  vplot:
    mov es:[di],al  ; <--- Error
    add di, 320   ;mov down a pixel
  loop vplot
 ;=============================
 keypress:
   mov ah,00
   int 16h   ;await keypress
 end:
   mov ah,00
   mov al,03
   int 10h
   mov ah,4ch
   mov al,00   ;terminate program
   int 21h
14: Error: Invalid combination of opcode and operands
20: Error: Invalid combination of opcode and operands
28: Error: Invalid combination of opcode and operands