标签: x86-16

寄存器寻址模式与直接寻址模式

我在试卷中遇到了这个问题.它说,哪种给定的寻址模式更快?为什么?

  1. 注册寻址模式
  2. 直接寻址模式

现在根据我的寄存器寻址模式应该更快,因为寄存器是计算机中最快的存储位置.这是正确答案吗?

请帮忙.谢谢

assembly addressing-mode x86-16

4
推荐指数
2
解决办法
1万
查看次数

以下汇编命令有一些好处吗?

在我们系统的编程课程中,我们正在学习汇编语言.在大多数示例程序中,我们的教授.在课堂上表现出来; 他正在使用:

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/ ORXOR代替备用(易于理解/读取)方法时是否有某种更好的性能?

由于这些课程通常在理论讲座时间向我们展示,因此大多数课程无法用口头方式对其进行评估.为什么花40分钟讲解这些琐碎的陈述?

x86 assembly masm x86-16

4
推荐指数
1
解决办法
477
查看次数

数字的奇偶性(Assembly 8086)

我试图给出一位数字,并知道奇偶校验是奇数还是偶数,例如,给出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)

谢谢!抱歉我的英语不好.

assembly parity x86-16

4
推荐指数
1
解决办法
1万
查看次数

使用ES寄存器会出错

我正在将程序从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)

x86 assembly nasm cpu-registers x86-16

4
推荐指数
1
解决办法
879
查看次数

INT 10h/ah = 13h在第二阶段引导加载程序的一部分时不打印字符串

我使用了第一个扇区中的所有内存,现在我想在第二个扇区(第二个阶段)中存储一个新的变量字符串并打印它.例如:

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)

x86 assembly nasm bootloader x86-16

4
推荐指数
1
解决办法
2136
查看次数

标志寄存器中保留/未定义位的用途是什么?

在Z80,8080,8085和8086处理器的标志寄存器中,第1,3,5位的目的是什么,它们被记录为"保留"或"未定义"?

z80 cpu-architecture 8085 intel-8080 x86-16

4
推荐指数
1
解决办法
745
查看次数

装配中的随机数

我是汇编的新手,想知道如何在EMU8086中编写一个程序,在每次运行时打印一个不同的随机数.是否可以在不使用中断的情况下完成?

random x86 assembly x86-16 emu8086

4
推荐指数
1
解决办法
2366
查看次数

emu8086抱怨DB中有一个长字符串的"Unterminated string"

我是8086程序集编程的新手,我有一个问题.

我有一个大小约1400个字符的字符串.当我试图定义它时:

.data
mystring DB '(string with 1400 characters)'
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误

"未终止的字符串".

我正在使用emu8086模拟器.我认为我的字符串不适合DB.有没有办法在字节中保留大字符串?

assembly x86-16 emu8086

4
推荐指数
1
解决办法
240
查看次数

在16位x86汇编中注册中断

我在16位x86汇编中编写自己的操作系统,我正在尝试注册自己的中断,如MS-DOS中的INT 21H.我在网上找不到任何东西.我正在使用NASM作为汇编程序.

x86 assembly interrupt nasm x86-16

4
推荐指数
1
解决办法
460
查看次数

如何在MOV和LEA指令后确定AX中的结果

我想在下面的问题中了解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]

x86 assembly real-mode x86-16

4
推荐指数
1
解决办法
135
查看次数