汇编格式和代码结构

时间:2013-12-21 16:15:08

标签: assembly formatting goto

我正在参加汇编课程,考试即将开始,所以我不得不问,汇编语言(特定于8086)这样的非结构语言的源代码的标准格式和结构是什么? 目前我喜欢格式化下面的代码,将新标签列中的标签后面的所有内容执行,并且不使用我以后不会使用的不必要的标签。

code segment
    start:  
        mov ax,data
        mov ds,ax

        mov cx,2
        label1:
             mov dl,'a'
             mov ah,2
             int 21h 
             loop label1

        mov ah,4ch
        int 21h
code ends

但是我的教授正在做一些我认为完全荒谬的事情。他使用不必要的标签格式化代码,如下所示:

PRINT_HEX PROC 
    H1: MOV BP,SP
        MOV CX,4    
    H2: MOV BX,[BP+2] 
    H3: XOR DL,DL 
        PUSH CX
        MOV CX,4
    H4: SHL BX,1
        RCL DL,1  
    H5: LOOP H4  
        POP CX
    H6: CMP DL,9    
        JA GRAMMA   
        ADD DL,48   
        JMP H7  
    GRAMMA: ADD DL, 55 
    H7: MOV AH,2
        INT 21H
    H8: LOOP H3
    H9: RET
PRINT_HEX ENDP

当然,他显然比我更了解集会但他的方式对我来说似乎不对。 使用标签在语言中格式化代码的标准方法是什么?

1 个答案:

答案 0 :(得分:1)

我不认为写入程序集有标准的样式,因为在C中没有单一的写入标准。这就是说,我发现你的方法非常合理:程序中的循环很容易被检测到,循环计数器位于循环体的其余部分的同一级别,并且一个空白行直观地表示该代码块。

对于用8位计算机组装的古代代码,我发现很多次这种写法:

code segment
start:  mov ax,data
        mov ds,ax

        mov cx,2
label1: mov dl,'a'
        mov ah,2
        int 21h 
        loop label1

        mov ah,4ch
        int 21h
code ends

我认为从第一列开始放置标签的传统来自汇编程序是非常简单的程序,这些程序在标签,指令和操作数应该去的地方做出一些假设。我的第一个用于ZX Spectrum的Hisoft DevPac假设在第一列写的任何东西都是标签,因此,它不需要在标签本身之后使用冒号。由于当时有许多人学习汇编程序,他们继续以与以往相同的方式编写它(包括我自己)。