微机原理作业与答案

发布 2022-09-04 20:29:28 阅读 9176

第四章汇编语言程序设计。

4-2 下列程序执行后,寄存器ax,bx,cx的内容分别是多少?

d segment at 0202h;定位数据段地址。

org 0202h ;定位偏移地址。

da_word dw 20h

mov ax,da_wordax)=0020h

mov bx,offset da_word ;(bx)=0202h

mov cl,byte ptr da_word ;(cl)=20h(将变量da_word的属性改变为字节型)

mov ch,type da_wordch)=2(变量类型数值)

cx)=0220h

4-4 试编制一程序,把char1中各小写字母分别转换为对应的大写字母,并存放在char2开始的单元中(题目要求:不改变char1的内容)

方法1,小写字母转换一个输出显示一个,前3种方法均使用了al寄存器。

d segment

char1 db "abcdefghijklmnopqrstuvwxyz"

n equ $-char1;变量必须先定义后使用,而不能相反。

char2 db n dup(0) ;不能把此句与上一句对调,char2 db $-char1有。

的同学这样写,错在哪

d ends

s segment stack

db 200 dup(0)

s ends

c segment

assume cs:c,ds:d,ss:s ;assume是伪指令,后面不能写冒号

start: mov ax,d

mov ds,ax

mov es,ax ;只要用到串操作指令且di

lea si,char1 ;mov si,offset char1

lea di,char2 ; mov di,offset char2

mov cx,n ;$char1,不可以。

again:mov al,[si]

sub al,20hand al,5fh 有的同学是这样实现的

mov [di],al

mov dl,al

mov ah,2

int 21h ;从屏幕显示

inc si

inc di

loop again

mov ah,4ch

int 21h ; 不是必须的。

c ends

end start

方法2:使用通用数据传送指令mov

d segment

char1 db ‘abcdefghijklmnopqrstuvwxyz’

n equ $-char1;变量必须先定义后使用,而不能相反。

char2 db n dup(0);不能把此句与上一句对调 d ends

stack segment stack

db 200 dup(0)

stack ends ;p126(**段和堆栈段是不可少的)

c segment

assume cs:c ,ds:d ,ss:s

start: mov ax,d

mov ds,ax

mov es,ax ;只要用到串操作指令且di

mov si,0 ;lea si,char1

mov di,0 ;lea di,char2

mov cx,n

again: mov al,char1[si] ;mov al,[si]

sub al,20h mov char2[di],al ; mov [di],al inc si

inc di

loop again

mov ah,4ch

int 21h ;不是必须的。

c ends

end start

第3种方法:使用串的读写指令lodsb stosb

d segment

char1 db ‘abcdef’

n equ $-char1

char2 db $-char1 dup(0) d ends

stack segment stack

db 200 dup(0)

stack ends ;p126(**段和堆栈段是不可少的)

c segment

assume cs:c,ds:d,ss:s

start: mov ax,d

mov ds,ax

mov es,ax

mov si,0 ;lea si,char1

mov di,0 ;lea di,char2

mov cx,n

cld ;不写(隐含)也是0(递增)但不能std

again: lodsb执行一次,隐含修改si

sub al,32 stosb ;mov [di],al;执行一次, 隐含修改di inc di loop again ;loop指令只修改cx,不管si,di

mov ah,4ch

int 21h ;不是必须的。

c ends

end start

第四种方法2006级,没有显示使用movsb指令。

d segment

char1 db "abcdefghijklmnopqrstuvwxyz"

n equ $-char1

char2 db n dup(0)

d ends

s segment stack

db 200 dup(0)

s ends

c segment

assume cs:c,ds:d,ss:s

start:

mov ax,d

mov ds,ax

mov es,ax

lea si,char1

lea di,char2

mov cx,n

again:movsbsub [si],20h

dec dimovsb

sub byte ptr[di],20h ;loop adain 错在**?结果如何?

inc di

loop again

mov ah,4ch

int 21h

c ends

end start

方法5: 只用一个地址指针si

d segment

char1 db "abcdefghijklmnopqrstuvwxyz"

n equ $-char1

char2 db n dup(0)

微机原理作业与答案

8086第三章作业。3 11在实模式下,若段寄存器中装入如下数值,试写出每个段的起始地址和结束地址。1 1000h 10000h 1ffffh 2 1234h 12340h 2233fh 3 e000h e0000h effffh 4 ab00h ab000h bafffh 3 12对于下列cs i...

微机原理作业答案

程序题作业答案 一 写指令 1 将di寄存器的内容减1dec di或 sub di 1 2 用一条指令使程序从中断服务程序返回 iret 3 从80h端口读入数据送入alin al,80h 4 将3000h及3001h两单元内容与ax寄存器内容相减,并将其差送回原单元。sub 3000h ax 5 ...

微机原理作业答案

第一次作业。2.完成下列补码运算,并根据结果设置标志sf zf cf和of,指出运算结果是否溢出。1 00101101b 10011100b 45 补。100 补。55 补。sf 1 zf 0 cf 0 of 0 无溢出。2 01011101b 10111010b 93 补。70 补。93 补。sf...