REP STOSB (STOSW or STOSD )
REP MOVSB
REP INSB
REP OUTSB
Run Code Online (Sandbox Code Playgroud)
那些字符串数据传输是允许的,但我的课程材料说REP LODSB不允许?
我写的简单
\n\n.MODEL small\n\n.STACK 100h\n.DATA \n liczba dw 0h\n licznik dw 0\n potega dw 1\n liczbaString dw ?\n\n buff db 26\n.CODE\n Program:\n mov ax, @DATA\n mov ds, ax\n\n call PobierzString\n call PetlaIteracjiZnaku\n\n ;zwraca do ax pobran\xc4\x85 liczb\xc4\x99\n PetlaIteracjiZnaku PROC\n mov si, liczbaString\n call ZnajdzDlugoscString\n mov si, liczbaString\n add si, 2\n mov bl, 1\n petla:\n xor ax, ax\n mov al, [si]\n cmp al, 24h; sprawdza czy nie jest koniec wprowadzanej liczby \'$\'\n je return\n sub al, 30h ; odejmuj\xc4\x99 30 \xc5\xbceby …Run Code Online (Sandbox Code Playgroud) 我什至在启动问题的解决方案时遇到问题。我曾尝试考虑乘法是重复加法算法,但无论我考虑什么算法,我似乎都专注于一个问题——8086 中的最大寄存器大小是 16 位。
data segment
num1 dw 0102h,0304h,0506h,0708h
num2 dw 0102h,0304h
res dw ?,?,?,?,?,?
data ends
code segment
assume CS:CODE, DS:DATA
start:
mov ax,DATA
mov DS,ax
Run Code Online (Sandbox Code Playgroud)
.....填写代码.......
在这一点上,我被卡住了。即使是轻微的代码提示或算法也将不胜感激。
powerCommand:
mov si, powerOFF
call printString
;sleep command here
mov ax, 0x1000
mov ax, ss
mov sp, 0xf000
mov ax, 0x5307
mov bx, 0x0001
mov cx, 0x0003
int 0x15
ret
Run Code Online (Sandbox Code Playgroud)
我希望程序等待 1 秒然后继续关闭。目前,它在关闭消息后立即关闭。我在 nasm 制作的自定义操作系统上运行它。
我正在尝试为学校学习汇编,示例代码的开头有这部分:
mov al, 0
mov ah, 5
int 10
Run Code Online (Sandbox Code Playgroud)
在此之前有一个程序:
.386
instructions SEGMENT use16
ASSUME CS:instructions
interrupt_handler PROC
; some code
interrupt_handler ENDP
Run Code Online (Sandbox Code Playgroud)
什么是int 10线在做什么?它是调用interrupt_handler程序吗?为什么正好是10?
这一切都在 DoSBox 中运行,并使用 masm 组装。
我想得到 2 个不同的东西:
(1)(bp 处的值)加16(数学加法)类似于:mov ax, [bp] + 16
(2)bp+16 的值(地址 bp+16)
为了得到(1)我试过:
mov ax, bp+16
Run Code Online (Sandbox Code Playgroud)
但它给出了一个错误。
对于(2)我试过:
mov ax, [bp+16]
Run Code Online (Sandbox Code Playgroud)
哪个有效。(我希望我做对了)。
为什么汇编看不懂评价:
mov ax, bp+16
Run Code Online (Sandbox Code Playgroud)
但是可以理解:
mov ax, [bp+16]
Run Code Online (Sandbox Code Playgroud)
因为加法不是使用+符号定义的,那么幕后发生了什么?
我已经完成了我的研究,并偶然发现了许多解决方案来更改字符串的某些字符。我正在尝试以字符串形式打印十六进制代码。但我已经尝试了所有的解决方案,但它不会在“平面汇编器”上编译。以下是我的代码:
mov bx, HELLO
call print_string
mov dx, 0x1fb6
call print_hex
jmp $
print_hex:
pusha
mov cx, HEXi
mov al, byte ptr [cx]
back:
popa
ret
include "print_string.asm"
HELLO: db 'Hello, World!',0
HEXi: db '0x0000',0
times 510 -( $ - $$ ) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)
在编译时它只显示无效的表达式错误。
我试图在实模式下绘制到屏幕,所以我试图使用分段访问 0xB8000
我的汇编代码是这样的
[BITS 16]
org 0x7c00
begin:
mov ah, 0x01 ; disable cursor
mov ch, 0x3f
int 0x10
mov ch, 0x0000
mov cs, 0xb800
mov ah, 0x0000
mov [cs:ah], ch ; invalid effective address
end:
jmp end
times 510 - ($-$$) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)
我将如何正确使用分段来解决 0xB8000?
.MODEL SMALL
.STACK 100h
.DATA
men1 db 0dh,0ah," $"
men2 db 0dh,0ah," MAIN MENU$"
men3 db 0dh,0ah," [1]Calculator$"
men4 db 0dh,0ah," [2]Conversion$"
men5 db 0dh,0ah," [3]Exit$"
Run Code Online (Sandbox Code Playgroud)
有没有办法只使用寄存器来显示这个字符串?