汇编实验3

任务一

描述:在数据段中依次存入 10H,11H,12H,13H,14H,15H,16H,17H,将其相加,并将结果存入DX寄存器。

mov dx,0        ; DX清零
mov si,0200     ; 数据起始位置
mov cx,8        ; 循环次数
add dl,[si]     ; 从内存取一个字节加到DL(低8位)
inc si          ; SI指向下一个字节
loop 0109       ; 循环回到 add 指令处
int 3           ; 结束程序

e 0200 10 11 12 13 14 15 16 17
g
  • SI :源索引寄存器( Source Index
  • dldx 的低位寄存器。
  • int 3 相当于 return 0,告诉循环结束的位置。
  • g 从当前的 CS:IP 执行,也就是 073F:0100,正好是程序入口,一直执行直到 int 3 程序的断点。
  • 与实验二 的 t 不同,t 是单步执行。

任务三

描述:3)在长度为 8 的字节数组(无符号数)中,查找大于 42H 的无符号数的个数,存放在字节单元 up 中;等于 42H 的无符号数的个数,存放在字节单元 equa 中;小于 42H 的无符号数的个数,存放在字节单元 down 中。程序显示 up,equa,down 的值。
八个数:31H,21H,42H,52H,87H,23H,98H,01H

-a 100
073F:0100 mov si,0200
073F:0103 mov cx,8
073F:0106 mov bl,42
073F:0108 mov al,0 ;大于
073F:010A mov ah,0 ;等于
073F:010C mov dl,0 ;小于
073F:010E mov bh,[si]
073F:0110 cmp bh,bl
073F:0112 ja 011A
073F:0114 je 011E
073F:0116 inc dl
073F:0118 jmp 0120
073F:011A inc al
073F:011C jmp 0120
073F:011E inc ah
073F:0120 inc si
073F:0121 loop 010E
073F:0123 mov [0210],al
073F:0126 mov [0211],ah
073F:0129 mov [0212],dl
073F:012E int 3

e 0200 31,21,42,52,87,23,98,01
g
d 210
  • debug 不接受标签 (next等),所以只能自己计算地址。

  • r al 报错,所以要存在内存里面。

    • 它只接受 16 位寄存器名 AX, BX, CX, DX, SP, BP, SI, DI, DS, ES, SS, CS, IP
    • 使用 8 位寄存器节省空间。
posted @ 2025-10-06 11:47  xqy2003  阅读(1)  评论(0)    收藏  举报