我一直坚持这个问题一天,没有找到任何相关的信息..
在我的代码中有一个部分需要一个数字(例如259)并将它的数字分成数组插槽.
SEPERATE_DIGITS:
mov ax,RESULT ; result is the number im working on. RESULT dw 259h
mov si,0
SEPERATE_DIGITS_LOOP:
div TEN ; TEN dw 10h
add dl,30h ; fix-up to print later on
mov SEPERATED[si],dl ; store separated digit in my array.
inc si
cmp ax,0
jne SEPERATE_DIGITS_LOOP
Run Code Online (Sandbox Code Playgroud)
我一直在turbo调试器上调试..第一部分工作正常.(25转到ax,9转到dx)..下一个分区,IP转到ape并且只是跳转到命令"db FE"并且一次又一次地在无限循环中.
我到底做错了什么?问:
这就是问题:第二个mul溢出标志设置为1; 乘法是一个简单的120*(-6) = -720,它包含在16位......我不明白为什么.
.model small
.stack
.data
a dw 30
b dw 3
c dw -6
ris dw ?
.code
.startup
mov ax, a
mov bx, 4
mul bx
jo ove
mov bx, c
mul bx
jo ove
Run Code Online (Sandbox Code Playgroud)
...
end
Run Code Online (Sandbox Code Playgroud) 我刚刚开始阅读有关英特尔8086的内容,并对其内存有疑问.
我读到地址总线是20位宽,这意味着地址空间是1MB,并且这个空间被分成段.
问题是:
四个段寄存器,CS,DS,SS和ES,他们是只读或者我可以设置自己的价值观,这是他们的默认值?
我看到了以下的汇编教程:
ORG 100h
MOV AX, 0B800h ; set AX = B800h (VGA memory).
MOV DS, AX ; copy value of AX to DS.
MOV CL, 'A' ; CL = 41h (ASCII code).
MOV CH, 01011111b ; CL = color attribute.
MOV BX, 15Eh ; BX = position on screen.
MOV [BX], CX ; w.[0B800h:015Eh] = CX.
RET
Run Code Online (Sandbox Code Playgroud)关于第一行,这是否意味着此代码将存在0x100于代码段空间或整个地址空间中的地址中
和行:
MOV [BX], CX
Run Code Online (Sandbox Code Playgroud)
这是否意味着每次我在MOV指令中引用地址时,都应该从数据段的起始地址估算地址?(因为他写道,目的地是值+数据段reg中的值)
这就是我想做的:
我想写一个存储在寄存器中的地址,这样就可以使用它。
mov bx, STRING
add bx, 0x1
;and here I want to write a value the the address in bx
STRING: db "abcdefghijklmnopqrstuvwxyz"
Run Code Online (Sandbox Code Playgroud)
我可以理解,对此可能有一个简单的说明,但找不到。
我正在使用NASM汇编器使用16位处理器。
我目前正在尝试编写16位实模式启动代码,该代码打印一个字母,然后从软盘加载第二个段并跳转到该段,然后再打印一个字母。
但是,我对“从云端硬盘读取扇区”呼叫的工作方式有些困惑。到目前为止,这是我的代码:
[BITS 16]
org 0x7B00
start:
mov ax, 0xB800 ; Video buffer
mov es, ax ; Copy address of video buffer to extra segment
mov byte [es:0], 'A' ; Move character A to first address
mov byte [es:1], 0x17 ; Format for blue background, white foreground
mov ah, 0x02 ; Read sectors from drive
mov al, 1 ; Read 1 sector
mov ch, 0 ; Cylinder 0
mov cl, 0 ; Sector 0
mov dh, 0 ; Head 0 …Run Code Online (Sandbox Code Playgroud) 我有abc使用循环语法打印的ASM代码。这是我的代码
;abc.com
.model small
.code
org 100h
start:
mov ah, 02h
mov dl, 'a'
mov cx, 3h
ulang:
int 21h
inc dl
loop ulang
int 20h
end start
Run Code Online (Sandbox Code Playgroud)
问题是,为什么要NOP在之后INT 21而不是INC dl?据我所知它应该INC dl那么LOOP xxxx三次,然后INT 20。
当我-t连续按下时,它会一直到不知道的地方直到崩溃,这意味着找不到INT 20h
它显示INC dl并LOOP 0107指示循环。
仅供参考:
我正在处理一个程序集程序,它将整个文本文件读入缓冲区,然后在控制台中显示它.它一次显示24行(每行的最大长度为80,因为我使用80宽*25高度的幻灯箱)然后等待用户输入,以便用户可以滚动文本.
我想在每行的开头添加行数,所以想到我可以制作第二个缓冲区并从第一个复制字符1by1,当我找到换行符时,我会调用一个程序,它会将行号添加到缓冲,然后继续,直到我继续通过整个缓冲区.但是我从一个缓冲区复制到另一个缓冲区的方式很糟糕.
所以我想把BUFFA复制到BUFFB:
mov di,OFFSET BUFFB ;so i set di to the beggining of bufferB
mov si,Pos ;Pos is my position in the first buffer
lea bx,BUFFA[si] ;move the content of buffA to bx , i think the problem is here
mov [di],bx ;move to the addres of di the content of bx
inc di
inc Pos
Run Code Online (Sandbox Code Playgroud)
问题是当我打印出第二个缓冲区的内容时,我发现我将si(与Pos相同)的值复制到我的缓冲区而不是缓冲区A [si]的内容.我该如何修复此代码?
编辑1:
所以解决方案是使用mov和al寄存器:
mov si,Pos
mov al,[BUFF + si]
mov [di],al
inc di
Run Code Online (Sandbox Code Playgroud) 我是汇编语言的新手.我最近陷入了悲惨的境地.我创建了一个示例汇编程序,如下所示:
head.h
#define _Length_ 0x0A
Run Code Online (Sandbox Code Playgroud)
电源
movw $_LENGTH_, %ax
movw _LENGTH_, %ax
Run Code Online (Sandbox Code Playgroud)
现在两个MOV语句有什么区别?斧头的价值是什么?
我正在使用Ubuntu和GAS汇编程序(AT&T语法).
提前致谢
NUM EQU 3
.MODEL small
.STACK
.DATA
tempi DW 8,27,17,12,21,34,9,41,7,18,15,5
risultato DW NUM DUP (?)
.CODE
.STARTUP
PUSH OFFSET tempi
PUSH OFFSET risultato
CALL copiaVettore
ADD SP,4
MOV CX, 0
MOV CX,12
LEA BX, risultato
salta:
MOV DX, [BX]
ADD DX, 30h
ADD BX, 2
MOV AH, 2h
INT 21h
LOOP salta
.EXIT
copiaVettore PROC
PUSH BP
MOV BP, SP
PUSH DI
PUSH SI
MOV DI, [BP+4] ;risultato
MOV SI, [BP+6] ;sorgente
MOV CX, 12
ciclo1:
MOV AX, [SI]
MOV …Run Code Online (Sandbox Code Playgroud) 我正在使用TASM汇编程序,我似乎找不到保存命令行参数甚至输出它们的方法.我试图做int 21h而dx=0081h和ah=09h.它没有做任何事情,虽然我已经读到它是这样做的方式.
我添加了我认为应该复制的代码并显示我输入的参数:
mov dx, 81h
mov ah, 09h
int 21h
Run Code Online (Sandbox Code Playgroud)