美文网首页
汇编语言上机考试三星题6(二刷)

汇编语言上机考试三星题6(二刷)

作者: 魔一方 | 来源:发表于2018-11-14 15:18 被阅读0次

    6.在BUFFER中定义了的十个带符号字,将其中的负数变成绝对值,并以十进制方式输出。

    重要提示:

    这道题的思路来自学长的代码,他的十六进制转十进制用的字符串,太机智了。

    定义好BUF1,BUF10,然后先对BUF1的每一个字进行判断,是负数就NEG

    然后进行输出,首先输出第一个数,把DI置4,也就是00000的最后一位,然后把那个字类型的16进制数除10,这时候余数存在DX中,因为余数不会大于10,所以直接在DL取,加30H之后就直接进行替换,然后减DI,重新让DX置零,再做除法,这里结束判断标志是DI小于0,DI=FFFF,所以不能用JNB,应该用JGE,因为对无符号数来说,FFFF>0

    然后让DI+11,因为00000,00000一共是11。在进行上述除法操作,结束标志是BUF10[DI]=‘,’。

    再九号调用输出就可以了。

    DATAS SEGMENT

        BUF1 DW 0FFFEH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0901H,0FFFFH,0FFFFH,0FFFFH,0FFFFH

        BUF10 DB '00000,00000,00000,00000,00000,00000,00000,00000,00000,00000',0DH,0AH,'$'

        ;此处输入数据段代码

    DATAS ENDS

    STACKS SEGMENT

        ;此处输入堆栈段代码

    STACKS ENDS

    CODES SEGMENT

        ASSUME CS:CODES,DS:DATAS,SS:STACKS

    START:

        MOV AX,DATAS

        MOV DS,AX

        MOV ES,AX

        MOV SI,0

    L:

    CMP SI,20

    JE DISP

    MOV AX,BUF1[SI]

    CMP AX,0

    JG NOTFU

    NEG AX

    NOTFU:

    MOV BUF1[SI],AX

    ADD SI,2

    JMP L

    DISP:

    MOV SI,0

    MOV DI,4

    MOV CX,10

    MOV AX,BUF1[SI]

    LOOP1:

    MOV DX,0

    DIV CX

    ADD DL,30H

    MOV BUF10[DI],DL

    DEC DI

    CMP DI,0

    JGE LOOP1

    LOOP2:

    ADD DI,11

    ADD SI,2

    CMP SI,20

    JE END0

    MOV AX,BUF1[SI]

    LOOP3:

    MOV DX,0

    DIV CX

    ADD DL,30H

    MOV BUF10[DI],DL

    DEC DI

    CMP BUF10[DI],','

    JNE LOOP3

    JMP LOOP2

    END0:

    LEA DX,BUF10

    MOV AH,09H

    INT 21H

        MOV AH,4CH

        INT 21H

    CODES ENDS

        END START

    相关文章

      网友评论

          本文标题:汇编语言上机考试三星题6(二刷)

          本文链接:https://www.haomeiwen.com/subject/fmrjfqtx.html