Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何将DOSBox中运行的汇编程序中的文本插入剪贴板?_Assembly_X86_Clipboard_Dos_Dosbox - Fatal编程技术网

Assembly 如何将DOSBox中运行的汇编程序中的文本插入剪贴板?

Assembly 如何将DOSBox中运行的汇编程序中的文本插入剪贴板?,assembly,x86,clipboard,dos,dosbox,Assembly,X86,Clipboard,Dos,Dosbox,我在程序集中有一个包含字符串的db变量,如下所示: STR_VAR db 'test$' 是否可以将此变量复制到剪贴板,以便当用户在另一个程序(如word)中按Ctrl+V时,将文本粘贴到变量中 编辑: 重要信息: 我正在使用DOSBox运行代码实际上有一个官方的DOS API,用于访问主机的剪贴板,在Windows 3.x和9x中受支持。这篇文章(以前在Microsoft的知识库中)对此进行了简要描述 下面是NASM语法的代码示例: 组织0x100 mov-ax,0x1700;Identif

我在程序集中有一个包含字符串的db变量,如下所示:

STR_VAR db 'test$'
是否可以将此变量复制到剪贴板,以便当用户在另一个程序(如word)中按Ctrl+V时,将文本粘贴到变量中

编辑: 重要信息:
我正在使用DOSBox运行代码

实际上有一个官方的DOS API,用于访问主机的剪贴板,在Windows 3.x和9x中受支持。这篇文章(以前在Microsoft的知识库中)对此进行了简要描述

下面是NASM语法的代码示例:

组织0x100 mov-ax,0x1700;IdentifyWinOldApVersion int 0x2f cmp ax,0x1700 jz错误 mov-ax,0x1701;打开剪贴板 int 0x2f 测试ax,ax jz错误 mov-ax,0x1709;剪贴簿 mov cx,STR_VAR.end-STR_VAR 异或硅,硅 int 0x2f cmp-dx,si jb错误 是的,很合适 cmp cx,ax jb错误 .适合: mov-ax,0x1703;设置剪贴簿数据 mov-dx,7;原文 mov bx,STR_VAR ; ES和SI:CX已设置 int 0x2f 测试ax,ax jz错误 mov-ax,0x1708;关闭剪贴板 int 0x2f mov ax,0x4c00 int 0x21 错误: mov-ax,0x4c01 int 0x21 STR_VAR: db“测试” (完)
然而,我很怀疑vanilla DOSBox是否真的支持此API,尽管DOSBox-X(一种fork)显然支持此API。

实际上有一个官方的DOS API,用于访问主机的剪贴板,在Windows 3.X和9x中受支持。这篇文章(以前在Microsoft的知识库中)对此进行了简要描述

下面是NASM语法的代码示例:

组织0x100 mov-ax,0x1700;IdentifyWinOldApVersion int 0x2f cmp ax,0x1700 jz错误 mov-ax,0x1701;打开剪贴板 int 0x2f 测试ax,ax jz错误 mov-ax,0x1709;剪贴簿 mov cx,STR_VAR.end-STR_VAR 异或硅,硅 int 0x2f cmp-dx,si jb错误 是的,很合适 cmp cx,ax jb错误 .适合: mov-ax,0x1703;设置剪贴簿数据 mov-dx,7;原文 mov bx,STR_VAR ; ES和SI:CX已设置 int 0x2f 测试ax,ax jz错误 mov-ax,0x1708;关闭剪贴板 int 0x2f mov ax,0x4c00 int 0x21 错误: mov-ax,0x4c01 int 0x21 STR_VAR: db“测试” (完)
然而,我非常怀疑vanilla DOSBox是否真的支持此API,尽管DOSBox-X(一种fork)显然支持此API。

在TASM语法中,您需要进行一些添加和更改,以便与最新的DOSBox-X配合使用。 这是最终的工作版本

IDEAL
MODEL small
STACK 100h
DATASEG

STR_VAR DB 'test',0
CODESEG
start:
    mov ax, @data
    mov ds, ax

        mov     ax,  1700h   ; IdentifyWinOldApVersion
        int     2fh
        cmp     ax,  1700h
        jz      error_2

        mov     ax,  1701h   ; OpenClipboard
        int     2fh
        test    ax, ax
        jz      error_2

        mov     ax,  1709h   ; ClipboardCompact
        mov     cx, 5  ; STR_VAR.end - STR_VAR
        xor     si, si
        int     2fh
        ;cmp     dx, si
        ;jb      error_2
        ;ja      fits
        cmp dx, 0
        jne fits
        cmp ax, 0
        je error_2
        jmp fits
        cmp     cx, ax
        jb      error_2

fits:
        mov     ax,  1703h   ; SetClipboardData
        mov     dx, 7        ; CF_OEMTEXT
        mov     bx, offset STR_VAR
        ; ES and SI:CX already set up
        push ds
        pop es
        int     2fh
        test    ax, ax
        jz      error_2
        
        mov     ax,  1708h   ; CloseClipboard
        int     2fh


       mov     ax,  4c00h
        int      21

error_2:
        mov     ax,  4c01h
        int      21

exit:
    mov ax, 4c00h
    int 21h
END start

在TASM语法中,您需要进行一些添加和更改,以便与最新的DOSBOX-X配合使用。 这是最终的工作版本

IDEAL
MODEL small
STACK 100h
DATASEG

STR_VAR DB 'test',0
CODESEG
start:
    mov ax, @data
    mov ds, ax

        mov     ax,  1700h   ; IdentifyWinOldApVersion
        int     2fh
        cmp     ax,  1700h
        jz      error_2

        mov     ax,  1701h   ; OpenClipboard
        int     2fh
        test    ax, ax
        jz      error_2

        mov     ax,  1709h   ; ClipboardCompact
        mov     cx, 5  ; STR_VAR.end - STR_VAR
        xor     si, si
        int     2fh
        ;cmp     dx, si
        ;jb      error_2
        ;ja      fits
        cmp dx, 0
        jne fits
        cmp ax, 0
        je error_2
        jmp fits
        cmp     cx, ax
        jb      error_2

fits:
        mov     ax,  1703h   ; SetClipboardData
        mov     dx, 7        ; CF_OEMTEXT
        mov     bx, offset STR_VAR
        ; ES and SI:CX already set up
        push ds
        pop es
        int     2fh
        test    ax, ax
        jz      error_2
        
        mov     ax,  1708h   ; CloseClipboard
        int     2fh


       mov     ax,  4c00h
        int      21

error_2:
        mov     ax,  4c01h
        int      21

exit:
    mov ax, 4c00h
    int 21h
END start

操作系统中的操作系统?我使用的是windows,但我在DosBox中运行代码,DOS是否有剪贴板?看起来不是这样,但我不记得了。看起来这个功能是最近添加到dosbox的,请参阅。有一个CLIP$设备,显然也支持旧的Windows 3.1 API。@ItaiElidan:请编辑您的问题,以包含您正在谈论的dosbox的重要信息,并添加标签。否则,人们可能会认为这个问题不清楚,就投反对票。@NateEldredge DOSBox-X≠ 操作系统中的DOSBox.OS?我使用的是windows,但我在DosBox中运行代码,DOS是否有剪贴板?看起来不是这样,但我不记得了。看起来这个功能是最近添加到dosbox的,请参阅。有一个CLIP$设备,显然也支持旧的Windows 3.1 API。@ItaiElidan:请编辑您的问题,以包含您正在谈论的dosbox的重要信息,并添加标签。否则,人们可能会认为这个问题不清楚,就投反对票。@NateEldredge DOSBox-X≠ DOSBox。嘿,如果你能用TASM语法回答我会有帮助的。谢谢,如果你能用TASM语法回答我会有帮助的。谢谢