我正在使用 MASM 编译器和 DOSBOX。我想将变量的值保存到寄存器中。我想将num1值保存到cx寄存器中。我怎样才能做到这一点?
.MODEL SMALL
.STACK 50H
.DATA
num1 db '5'
NL DB 0DH, 0AH, '$'
msg db ?,0AH,0DH,"Enter an odd number between 0 to 10:$"
nxtline db 0Ah,0DH,"$"
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
LEA DX,msg
mov ah,9
int 21H
LEA DX,nxtline
mov ah,9
int 21H
MOV AH,1
INT 21H
LEA DX,nxtline
mov ah,9
int 21H
mov bl,al ;save the value from input
mov num1,bl
LEA DX,num1
mov ah,9
int 21H …Run Code Online (Sandbox Code Playgroud) 我只是想问:为什么我写的时候:
MOV DL, [BX]
Run Code Online (Sandbox Code Playgroud)
它有效,但是当我写:
MOV DL, [AX]
Run Code Online (Sandbox Code Playgroud)
不是吗?
我练习汇编已经有一段时间了,我在 YouTube 上看到了一个教你如何制作引导加载程序的视频。在观看视频时,我的脑海中出现了“int”是什么的问题。开始搜索,发现是interrupt的缩写。我想到了“什么是中断?”。我再次搜索并开始了解。但是,我很好奇中断是如何产生的,它们是如何产生的?...制造商会自己产生中断吗?或者是什么?
我知道它们是唯一可以用于间接寻址的寄存器,但我找不到解释为什么我不能同时使用这些寄存器对。
为什么机器不支持这样的寻址方式[si+di]?
下面的代码占用 20 个字节。然而,有一种方法可以通过中断使其变得更小。如何?
\nA\nMOV AH,9\nMOV DX,108\nINT 21\nRET\nDB 'HELLO WORLD$'\n\nR CX\n14\nN MYHELLO.COM\nW \nRun Code Online (Sandbox Code Playgroud)\n 我用这个8086汇编程序进行字符串比较,但它包含一个无限循环.我检查并重新检查.谁能找到我错的地方?
org 100
jmp start
str1: db "hello$"
str2: db "ello$"
start:
lea bx,str1
mov si,bx
lea ax,str2
mov di,ax
mov ax,1234
jmp compare
compare:
mov bl,[si]
cmp [di],bl
jne notequal
cmp bx,'$'
je equal
inc si
inc di
jmp compare
notequal:
mov ax,0000h
hlt
equal:
mov bx,0001h
hlt
ret
Run Code Online (Sandbox Code Playgroud) 我必须了解我的工作的一个小概念.我必须使用8086使用汇编语言中的DOS中断将存储在寄存器中的值传送到并行端口.以下是需要澄清的微小代码.
[org 0x0100]
mov AL, 01001011 ;any value in AL register that is to be transmitted
(...here...how to transmit it to parallel ports using DOS Interrupt?)
Run Code Online (Sandbox Code Playgroud) 为什么我的汇编代码跳过一行?它一直在跳线mov AX,A
org 100h
count equ 2
A DW 5
B DW 6
Y0 DW ?
Y1 DW ?
mov AX,A
add AX,B
sub AX,count
mov Y0,AX
mov BX,B
neg BX
add BX,count
mov Y1,BX
ret
Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以在8086汇编中操作(读取和更改值)指令指针(IP).
例如,
说IP当前正在存储0200h.我想读取这个值并将其更改为其他内容4020h.我怎么能这样做?