标签: x86-16

在x86程序集中向堆栈添加变量

我想知道,如何在ASM程序中设置局部变量?

谢谢!!

x86 assembly local-variables x86-16

0
推荐指数
1
解决办法
6819
查看次数

8086汇编 - 如何访问循环中的数组元素

好吧,为了使事情变得尽可能简单,我说我有一个基本循环,我想用它来修改标记为a的数组的某些元素.在下面的示例代码中,我尝试将a的所有元素替换为1,但这并不能真正起作用.

assume cs:code ,ds:data
data segment
  a db 1,2,3,4
  i db 0
data ends

code segment
start:
  mov ax,data
  mov ds,ax

  lea si,a

  the_loop:
    mov cl,i
    cmp cl,4
    jae the_end

    mov ds:si[i],1      ; this is the part that i don't really understand since
    inc i               ; i'm expecting i=0 and ds:si[i] equiv to ds:si[0] which
  loop the_loop         ; is apparently not the case here since i actually receives the
                        ; the value 1
  the_end:
    mov ax,4c00h
    int 21h
code ends …
Run Code Online (Sandbox Code Playgroud)

memory arrays x86 assembly x86-16

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

[Emu 8086]无法打开文件

程序应该打开文件,从中读取并打印前 4 个字符。

  • 我不知道问题出在哪里。我什至在那里自己创建了文件,但它仍然无法打开文件。

    org 100h
    jmp start  
    filename db "C:\f1.txt",0
    errormessage: db "Ndodhi nje gabim gjate ekzekutimit$"  
    Buffer db 50h dup(?)
    start:   
      lea dx,filename
      mov ah,3Dh
      mov al,0
      int 21h
      jc error  
      mov bx,ax         
      mov ah,3Fh
      mov cx,4
      lea dx,Buffer
      int 21h
      jmp end
    error:mov dx,offset errormessage
      mov ah,09h
      int 21h
    end: ret
    
    Run Code Online (Sandbox Code Playgroud)

assembly emulation x86-16

0
推荐指数
1
解决办法
4195
查看次数

如何存储CS和IP地址(Intel 8086)?

我想将CS(代码段)和IP(指令指针)地址存储到任何可用的寄存器AX,BX,CX或DX中.是否有可能以某种方式访问​​当前的CS或IP值?

assembly tasm x86-16

0
推荐指数
1
解决办法
935
查看次数

DOS:如何在文件的MIDDLE中添加文本,而不是重写它?

使用DOS int 21hAPI,如何在文件中间写文本而不是重写?即执行"插入"操作,而不是覆盖.

x86 assembly tasm dosbox x86-16

0
推荐指数
1
解决办法
108
查看次数

MOV 操作码规范

在我可以找到的关于 MOV 助记符的操作码的所有文档中,每个操作码都没有单独记录。操作码B8h+记录为将 16 位或 32 位数据移动到 16 位或 32 位注册表。究竟关注什么注册表,取决于B8h操作码高出多远。也就是说,要获得B8h类型为 MOV 指令的操作码,您需要B8h将寄存器的编号相加。问题是,我没有找到有关每个注册表数量的任何信息。以下是我的猜测,但我不确定。

目的地登记处。操作码。

AX  B8

CX  B9

DX  BA

BX  BB

EAX BC

ECX BD

EDX BE

EBX BF
Run Code Online (Sandbox Code Playgroud)

assembly masm machine-code x86-16

0
推荐指数
1
解决办法
1759
查看次数

程序集 8086:仅使用 MOV 和 LEA 对 2 个寄存器求和

我的任务是将 AX 和 BX 与 AX 相加,而不使用“MOV”或“LEA”操作数。我有点卡在这里,你能帮我吗?

; AX need to be 15, using ONLY 'mov' and 'lea'. 
; Do NOT use arithmetic instrutions (add, inc, mul, etc.)

    mov     ax,10
    mov     bx,4

    lea cx,ax
    lea cx, [cx+bx]  
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?抱歉我的错误,我是新手。

assembly mov x86-16

0
推荐指数
1
解决办法
1458
查看次数

如何修复“错误:无法生成 COM 文件,存在堆栈段”?

我一直试图修复我的代码一段时间,但我似乎无法让它工作。它总是告诉我错误:无法生成 COM 文件,存在堆栈段。有什么想法可以解决这个问题吗?

这是我的代码:

.model small
.386
.stack 100h
.data
     inpM db "Input string: $"
     input db 19              ; max allowed 20
              db ?                ; # char entered
              db 19 dup(0)   ; chars entered
     output db 19 dup("$")
.code
start:    mov ax, @data
            mov ds, ax

            mov ah, 9              ; print inpM
            lea dx, inpM
            int 21h

            mov ah, 0Ah         ; get input
            lea si, input
            mov dx, si
            int 21h

            mov cl, [si+1]        ; reverse
            mov ch, 0
            add …
Run Code Online (Sandbox Code Playgroud)

assembly compiler-errors dos tasm x86-16

0
推荐指数
1
解决办法
2514
查看次数

为什么汇编字符打印可以返回

以下代码打印字符“a”:

mov dl, ‘a'
mov ah, 2
int 21h
Run Code Online (Sandbox Code Playgroud)

我已经阅读了本手册,发现al我们得到:

返回:AL = 最后一个字符输出

我试图理解的是为什么我们实际上需要这种返回值?当我们在屏幕上获得输出时,这对我来说毫无意义,而且我们在 DL 中已经打印了最后一个字符(因为我们刚刚打印了它)。任何的想法?

assembly x86-16 emu8086

0
推荐指数
1
解决办法
48
查看次数

组件8086乘以41而不使用MUL

我想知道是否有一种无需使用MUL或DIV指令即可执行任何乘法或除法的方法,因为它们需要大量的CPU周期。我可以针对该目标利用SHL或SHR指令吗?如何实现汇编代码?

我需要特定数字的帮助-我如何bx仅用5个命令就能乘以41?

每当我尝试解决问题时,我至少会得到6条命令...

我的代码:

    mov ax,bx
    mov cx,bx
    shl bx,5    ;  *32
    shl ax,3    ;  *8
    add bx,ax   ; *40 
    add bx,cx   ; *41
Run Code Online (Sandbox Code Playgroud)

x86 assembly x86-16

0
推荐指数
1
解决办法
969
查看次数