实验2 多个逻辑段的汇编源程序编写与调试
Posted Sola!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验2 多个逻辑段的汇编源程序编写与调试相关的知识,希望对你有一定的参考价值。
实验2 多个逻辑段的汇编源程序编写与调试
原因:实际上伪指令end 描述了程序的结束和程序的入口。在编译、连接后,"end start" 指明的程序入口,被转化为一个入口地址,存储在可执行文件的描述信息中。当把start去掉之后程序入口转换成一开始默认的076A,而task1_1,task1_2,task1_3的真正程序段入口不为076A导致程序在内存空间中无法找到正确的指令。
assume cs:code code segment start: mov ax, 0b800h mov ds, ax mov bx, 0f00h mov cx, 50h s: mov ds:[bx], 0403h add bx, 2 loop s mov ah, 4ch int 21h code ends end start
(问题)
debug执行程序后,用d指令访问内存单元发现并未填入内存
编程实现时,注意进制问题、字节顺序问题。编写后,运行程序,如果与实验1的实验任务3结果不一致,说明程序编写有错误。
assume cs:code data1 segment db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers data1 ends data2 segment db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0 ; ten numbers data2 ends data3 segment db 16 dup(0) data3 ends code segment start: mov ax,data1 mov ds,ax mov bx,0 mov cx 0ah s:mov ax,ds:[bx] add ax,ds:[bx+10h] mov ds:bx[bx+20],ax inc bx loop s mov ah,4ch int 21h code ends end start
结果:
assume cs:code, ss:stack
data1 segment
dw 2, 0, 4, 9, 2, 0, 1, 9
data1 ends
data2 segment
dw 8 dup(0)
data2 ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax, data1
mov ds, ax
mov bx, 0
mov cx, 8
mov sp, 9
s1: push ds:[bx]
add bx, 2
loop s1
mov ax, data2
mov ds, ax
mov bx, 0
mov cx, 8
s2: pop ds:[bx]
add bx, 2
loop s2
mov ah, 4ch
int 21h
code ends
end start
实验结果:
db 2,3,4,5,6 --> 改成: db 5 dup(2) 或 db 5 dup(5)
经过分析应该是修改颜色。
assume cs:code, ds:data data segment db \'Pink Floyd \' db \'JOAN Baez \' db \'NEIL Young \' db \'Joan Lennon \' data ends code segment start: mov ax, data mov ds, ax mov cx, 64 mov bx, 0 mov ax,20h s: or [bx], ax inc bx loop s mov ah, 4ch int 21h mov ah, 4ch int 21h code ends end start
assume cs:codesg data segment db \'1975\', \'1976\', \'1977\', \'1978\', \'1979\' dd 16, 22, 382, 1356, 2390 dw 3, 7, 9, 13, 28 data ends table segment db 5 dup( 16 dup(\' \') ) table ends codesg segment start: mov ax, data mov ds, ax mov ax, table mov es, ax mov bx, 0 mov bp, 0 mov cx, 5 ;年份 s: mov dx, cx mov cx, 4 mov si, 0 s1: mov al, ds:[bx+si] mov es:[bp+si], al inc si loop s1 mov cx, dx mov byte ptr es:[bp+4],\' \' add bx, 4 add bp, 10h loop s mov bp, 0 mov cx, 5 ;收入 s2: mov ax,ds:[bx] mov es:[bp+5],ax mov ax,ds:[bx+2] mov es:[bp+7],ax mov byte ptr es:[bp+9], \' \' add bx, 4 add bp, 10h loop s2 mov bp, 0 mov cx, 5 ;雇员 s3: mov ax, ds:[bx] mov es:[bp+0ah], ax mov byte ptr es:[bp+0ch], \' \' add bx, 2 add bp, 10h loop s3 mov bp,0 mov cx,5 ;人均 s4: mov ax, es:[bp+5] mov dx, es:[bp+7] div word ptr es:[bp+0ah] mov es:[bp+0dh], ax mov byte ptr es:[bp+0fh], \' \' add bp, 10h loop s4 mov ax, 4c00h int 21h codesg ends end start
以上是关于实验2 多个逻辑段的汇编源程序编写与调试的主要内容,如果未能解决你的问题,请参考以下文章