标签: tasm

将寄存器设置为零的方法有多少?

我很好奇有多少种方法可以在x86汇编中将寄存器设置为零.使用一条指令.有人告诉我,他设法找到了至少10种方法.

我能想到的是:

xor ax,ax
mov ax, 0
and ax, 0
Run Code Online (Sandbox Code Playgroud)

x86 assembly tasm x86-16

28
推荐指数
2
解决办法
3万
查看次数

如何从Linux上的c源代码生成一个nasm可编译的汇编代码?

测试平台是32位Linux.

基本上,我知道gcc可以用来生成Intel和At&T样式的汇编代码,但似乎你不能直接使用nasm/tasm来编译生成的Intel样式汇编代码.

我正在Windows和Linux平台上进行项目分析asm代码,所以我想如果它们都可以由像nasm\yasm这样的平台独立汇编程序编译,我可以有一个更容易的时间......

所以我的问题是如何从Linux上的c源代码生成一个nasm可编译的汇编代码?

assembly gnu-assembler nasm tasm yasm

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

lea和offset之间的差异

ar db "Defference $"
Run Code Online (Sandbox Code Playgroud)

有什么区别

mov dx,offset ar
Run Code Online (Sandbox Code Playgroud)

lea dx,ar
Run Code Online (Sandbox Code Playgroud)

我认为两者都在做同样的工作,但这两者之间有什么区别

x86 assembly masm tasm

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

什么`dup(?)`在TASM中意味着什么?

我这里有这个代码,但我不熟悉语法.

STACK16_SIZE    =       100h
stack16         db      STACK16_SIZE dup (?)
Run Code Online (Sandbox Code Playgroud)

我认为dup意味着我们声明一个类型为array的变量,因为这是一个堆栈,但我不确定.那么dupTASM究竟意味着什么呢?

x86 assembly tasm

12
推荐指数
3
解决办法
4万
查看次数

我不明白如何使用中断21,AH = 0ah

我的信息来自这里.该作业要求读取不超过20个字符的程序,将这些字符转换为大写,然后将输入打印为大写字母.

我不知道如何从int21/AH = 0ah访问输入.除非我理解上面链接的内容,否则我真的不能问更准确的问题.谁能解释一下?此外,如果这有任何区别,我正在使用TASM.另外,我正在对freedos进行测试.

UPDATE1:

好的,多亏了你的帮助,我相信我理解中断是如何设置和行为的.

设置: 我必须指定一个ds:dx,我希望这个缓冲区存在

我必须将ds:dx设置为20(设置缓冲区可以容纳的最大字符数)

我必须将ds:dx + 1设置为0(我想以某种方式设置要读入的最小字符数)

实际上调用int21/AH = 0ah,它将转到ds:dx并解释预设的字节.它会在等待输入时暂停程序

int21/AH = 0ah将从我的输入填充ds:dx + 2 + n(其中n是输入的字符数,包括'\ r')

我现在的问题是,我该怎么做.我刚刚再次查看了x86汇编语言参考,但还没有找到任何有用的东西.

代码我到目前为止

           assume          cs:code,ds:code
code       segment
start:

           mov  ax,code ;moves code segment into reg AX
           mov  ds,ax   ;makes ds point to code segment

           mov  ah,0ah
           int  21h
           mov  ax,1234h  ;breakpoint

           mov  ah,9
           mov  dx,offset message
           int  21h

endNow:
           ;;;;;;;;;;ends program;;;;;;;;;;
           mov  ah,0  ;terminate program
           int  21h   ;program ends

message    db   'Hello world!!!',13,10,'$'
code       ends
           end …
Run Code Online (Sandbox Code Playgroud)

assembly dos interrupt bios tasm

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

奇怪的宏(TASM)

考虑以下宏:

pixelFast MACRO
    ; This macro draws a pixel, assuming the coordinates are already loaded in cx&dx and the color is in al.
    xor bh, bh
    mov ah, 0ch
    int 10h
ENDM

drawRect MACRO x1, y1, x2, y2, color
    LOCAL @@loop, @@row_loop
    xor cx, cx
    mov dx, y1
    mov al, BYTE PTR [color]

    @@loop:
        mov cx, x1
        @@row_loop:
            pixelFast

            inc cx
            cmp cx, x2
            jna @@row_loop

        inc dx
        cmp dx, y2
        jna @@loop
ENDM

rendToolBar MACRO
    drawRect COLORDISP_X1, COLORDISP_Y1, COLORDISP_X2, …
Run Code Online (Sandbox Code Playgroud)

macros assembly interrupt tasm dosbox

6
推荐指数
1
解决办法
752
查看次数

汇编,冒号后面的意思是“:”

我是新来的组装和我目前正在读会经常表达的东西就像一个向导ax:bxds:dxss:sp

在“精通Turbo汇编”第85页的示例中,我将使用以上示例之一。

注意,ss:sp中的逻辑地址指向堆栈中最后一个字节以下的字节。

:符号的含义是什么?

亲切的问候。

assembly tasm

5
推荐指数
1
解决办法
4425
查看次数

程序求解方程式

我的汇编中的简单程序有问题.我正在使用DOSbox和TASM.我有程序问题.操作数类型与第76 78 80行不匹配.这是在乘法之后.我尝试使用difftrent变量大小进行一些更改

; --------------------------------------------
; Equation=(a+c*b)/d-2*c,
; --------------------------------------------
.model small
.stack 100h
.data
        a       db 0                           
        b       db 0
        c       db 0
        d       db 0
        result1 db ?
        result2 db ?



        message1 db "Equation: (a+c*b)/d-2*c   a=$"
        message2 db "b=$"
        message3 db "c=$"
        message4 db "d=$"
        message5 db "Result=$"
.code

start:  mov ax,@data
                mov ds,ax                      

                mov ax, seg message1   ;get a and save to a variable
                mov ds,ax      
                mov dx,offset message1
                mov ah, 9h
                int 21h
                mov ah, 1h
                int …
Run Code Online (Sandbox Code Playgroud)

assembly equation tasm dosbox operands

5
推荐指数
0
解决办法
6041
查看次数

使用3Dh会导致中断仅返回"已拒绝访问"

配置:

MS-DOS 16 BIT(在.asm文件中写入,然后用TASM和TLINK编译它们)

Windows 7 x64

我在Assembly中创建了一个简单的程序,它只应该打开一个文件并为其写一个文本.
这是代码:

assume cs:code, ds:data
data segment
    fileName db "input.txt", 0 ; We assure it is an ASCIIZ(ero) file.
    toWrite db "Hello World!", "$"
data ends

code segment
  writeToFile:
    ; pentru functia 3Dh
    mov AH, 3Dh
    mov AL, 0h
    mov dx, offset fileName
    int 21h
    ret


  start_program:
    mov ax, data
    mov ds, ax  
    CALL writeToFile
    mov ax, 4c00h
    int 21h
code ends

end start_program
Run Code Online (Sandbox Code Playgroud)

我用TurboDebugger看看会发生什么.奇怪的是,它总是具有AX价值0005意义Access Denied

我在互联网上可以找到的所有东西都是ASSEMBLY …

assembly dos tasm dosbox x86-16

5
推荐指数
1
解决办法
223
查看次数

DOSBox上的8086汇编:带有idiv指令的Bug?

我帮助我的一个朋友调试他的程序,我们把它缩小到一个甚至在这里发生的问题:

.MODEL small
.STACK 16
.CODE
start:
    mov ax, 044c0h
    mov bl, 85
    idiv bl
exit:
    mov ax, 4c00h
    int 21h

end start
Run Code Online (Sandbox Code Playgroud)

用tasm 4.1组装它,然后在DOSBox 0.74上运行它,它进入一个无限循环.当涡轮调试器检查它人们可以看到它之后发生idiv的指令,这对于一些原因,修改csip登记,并经过两次看似随意指令恢复它们指向idiv线,再次执行它循环往复.

有没有人对此有任何解释?

x86 assembly tasm dosbox x86-16

5
推荐指数
1
解决办法
809
查看次数

标签 统计

assembly ×10

tasm ×10

dosbox ×4

x86 ×4

x86-16 ×3

dos ×2

interrupt ×2

bios ×1

equation ×1

gnu-assembler ×1

macros ×1

masm ×1

nasm ×1

operands ×1

yasm ×1