我在试卷中遇到了这个问题.它说,哪种给定的寻址模式更快?为什么?
现在根据我的寄存器寻址模式应该更快,因为寄存器是计算机中最快的存储位置.这是正确答案吗?
请帮忙.谢谢
在我们系统的编程课程中,我们正在学习汇编语言.在大多数示例程序中,我们的教授.在课堂上表现出来; 他正在使用:
XOR CX, CX
Run Code Online (Sandbox Code Playgroud)
代替
MOV CX, 0
Run Code Online (Sandbox Code Playgroud)
要么
OR AX, AX
JNE SOME_LABEL
Run Code Online (Sandbox Code Playgroud)
代替
CMP AX, 0
JNE SOME_LABEL
Run Code Online (Sandbox Code Playgroud)
要么
AND AL, 0FH ; To convert input ASCII value to numeral
; The value in AL has already been checked to lie b/w '0' and '9'
Run Code Online (Sandbox Code Playgroud)
代替
SUB AL, '0'
Run Code Online (Sandbox Code Playgroud)
我的问题如下,使用AND/ OR或XOR代替备用(易于理解/读取)方法时是否有某种更好的性能?
由于这些课程通常在理论讲座时间向我们展示,因此大多数课程无法用口头方式对其进行评估.为什么花40分钟讲解这些琐碎的陈述?
我试图给出一位数字,并知道奇偶校验是奇数还是偶数,例如,给出9并打印出奇数.
这就是我所拥有的:
assume cs:cseg,ds:dseg,ss:sseg
cseg segment
start:
mov ax, dseg
mov ds, ax
mov ah, 01h ; Here, im adding a number
int 21h
jp even
jnp odd
even:
mov ah,09
lea dx,par
int 21h
jmp exit
odd:
mov ah,09
lea dx,odd1
int 21h
jmp salir
salir:
mov ax,4C00h
int 21h
cseg ends
dseg segment byte
even Db 'Even number$'
odd11 Db 'Odd number$'
dseg ends
sseg segment stack
db 100h dup(?)
sseg ends
end start
Run Code Online (Sandbox Code Playgroud)
谢谢!抱歉我的英语不好.
我正在将程序从EMU8086环境转换为NASM。组装NASM时出现以下错误:
system \ kernel.asm:14:错误:操作码和操作数的无效组合
system \ kernel.asm:20:错误:操作码和操作数的无效组合
system \ kernel.asm:28:错误:操作码和操作数的无效组合
我的代码是:
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 *** 1st ERROR HERE!
mov di, 32000 ;row 101 (320 * 100)
add di, 75 ;column 76
mov al,colour
mov cx, 160 ;loop …Run Code Online (Sandbox Code Playgroud) 我使用了第一个扇区中的所有内存,现在我想在第二个扇区(第二个阶段)中存储一个新的变量字符串并打印它.例如:
hello db 'Hello World'
Run Code Online (Sandbox Code Playgroud)
新字符串应该在另一个扇区中(因为第一个扇区中没有更多的内存).我用INT 13h做了这个,啊= 2读取第二个磁盘扇区到地址900h:0000.我将变量存储hello在该扇区以及要打印的代码中.当我在这样的代码中使用INT 10h/ah = 13h时,它无法打印我的字符串:
mov ax, 7c0h
mov es, ax
mov bp, hello
mov ah,13h ; function 13 - write string
mov al,01h ; attrib in bl, move cursor
mov bl,0bh ; attribute - magenta
mov cx,30 ; length of string
mov dh,1 ; row to put string
mov dl,4 ; column to put string
int 10h ; call BIOS service
Run Code Online (Sandbox Code Playgroud)
当变量位于第一个扇区时,它打印得很好,但是当我将它存储在第二个扇区时,它不会打印,即使我这样做:
mov ax, 900h …Run Code Online (Sandbox Code Playgroud) 在Z80,8080,8085和8086处理器的标志寄存器中,第1,3,5位的目的是什么,它们被记录为"保留"或"未定义"?
我是汇编的新手,想知道如何在EMU8086中编写一个程序,在每次运行时打印一个不同的随机数.是否可以在不使用中断的情况下完成?
我是8086程序集编程的新手,我有一个问题.
我有一个大小约1400个字符的字符串.当我试图定义它时:
.data
mystring DB '(string with 1400 characters)'
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误
"未终止的字符串".
我正在使用emu8086模拟器.我认为我的字符串不适合DB.有没有办法在字节中保留大字符串?
我在16位x86汇编中编写自己的操作系统,我正在尝试注册自己的中断,如MS-DOS中的INT 21H.我在网上找不到任何东西.我正在使用NASM作为汇编程序.
我想在下面的问题中了解AX寄存器的内容,我不明白我怎么知道示例中的[5000h]或[DI]是什么.
寄存器和存储器的状态定义为:
CS=3000 [53000]=BBBB [33000]=6666 [13000]=1111
DS=1000 [54000]=CCCC [34000]=7777 [14000]=2222
SS=5000 [55000]=DDDD [35000]=8888 [15000]=3333
DI=7000 [56000]=EEEE [36000]=9999 [16000]=4444
BP=4000 [57000]=FFFF [37000]=AAAA [17000]=5555
Run Code Online (Sandbox Code Playgroud)
AX中的每个指令的值是多少
MOV AX, [DI]MOV AX, [5000h]MOV AX, [BP+2000h]LEA AX, [BP+1000h]