标签: 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
查看次数

如何在DOS中获得额外的段?

我想编写一个DOS程序(我的第一个程序),我有点没有经验。

对于该程序,我需要超过64 KB的(传统)内存。如何获得额外的内存?理想情况下,我想为程序增加两个64k的内存块。我可以开始将数据写入地址空间中的某个地方还是需要请求额外的内存吗?

assembly memory-management dos gnu-assembler x86-16

4
推荐指数
3
解决办法
1035
查看次数

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

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

z80 cpu-architecture 8085 intel-8080 x86-16

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

如何在汇编中从用户输入多位数字?

我需要找到一个可以从用户那里接收超过 1 位数字的中断。 ;代码

mov [0],0
mov si,0
lop:    
    mov ah,1
    int 21h
    cmp al,'q'
    je finishedInput
    xor ah,ah 
    add [word ptr si], ax
    jmp lop

finishedInput:
Run Code Online (Sandbox Code Playgroud)

我已经尝试做一个无限循环,每次都使用

mov ah,1 
int 21h 
Run Code Online (Sandbox Code Playgroud)

组合。当用户按下“q”时,无限循环停止。然而,我几乎确信我已经看到了一个代码,它用中断来做同样的事情。

我想停止使用这个块并使用可以更好地工作的短中断

assembly dos x86-16

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

ihah, ohah 和 int86 是什么?

我试图理解一个程序来获取箭头键。这是代码:

int getkeys( )
{
       union REGS i,o;
       while(!kbhit( ));
            i.h.ah=0;
       int86(22,&i,&o);
            return(o.h.ah);
 } 
Run Code Online (Sandbox Code Playgroud)

有人可以解释我这个代码。这是为了获得箭头键,但我没有得到这个代码。

assembly dos bios turbo-c++ x86-16

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

将 Turbo Pascal 内联代码转换为 Object Pascal

在将旧的 Turbo Pascal 单位转换为现代 Object Pascal 时,我遇到了以下问题:

function Less (var a, b; Relation : POINTER) : boolean;
    inline($5B/$59/$0E/$E8/$00/$00/$58/$05/$08/$00/$50/$51/$53/$CB);
Run Code Online (Sandbox Code Playgroud)

代码应该调用 an external function {$F+} function VariableLess(var a, b : Index) : boolean; {$F-},收集结果并将其传递给调用函数。该函数用于为无类型数据提供二叉树的单元中

procedure InsVarBBTree(var B: BBTree; var E; S: word; A: pointer; var ok: boolean);
{ puts variable E of size S into tree B. The order relation address is A. }
Run Code Online (Sandbox Code Playgroud)

因此,单元本身不能提供比较功能,即定义有效载荷的单元的工作。

使用在线反汇编器,我发现这对应于:

{$ASMMODE intel}
function Less (var a, b; Relation : POINTER) : boolean; assembler; …
Run Code Online (Sandbox Code Playgroud)

assembly pascal inline turbo-pascal x86-16

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

为什么 8 位 MUL 合并到 AX 中,而 16 位和 32 位 MUL 将结果拆分为 [E]DX:[E]AX?

  • MUL CL CL 是 BYTE 大小,它等于 AX = AL * CL

  • MUL BX BX 是 WORD 大小,它等于 DX:AX = AX * BX

  • MUL EBX EBX 是 DWORD 大小,它等于 EDX:EAX = EAX * EBX

我想知道为什么 8 位大小的MUL指令给出的结果是 inAX而不是 in DL:AL

是因为对于 16 位 MUL,结果可以是EAX,对于 32 位 MUL 结果可以是RAX,但是对于 64 位mul rcx,不会有足够宽的单个寄存器来保存结果吗?

assembly x86-64 multiplication instructions x86-16

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