8088编程
一、课后作业题: .................................................................................................................................. 1 3-2、若1KB的数据存放再TABLE以下,试编程序将该数据块搬到NEXT之下 ..................... 1 3-3、编写10个字(16位二进制数)之和的程序。....................................................................... 1 3-4、某16位二进制数,放在DATA1连续两单元中,试编写程序求其平方根和余数,将其分别放在ANS和REMAIN中。 .................................................................................................................... 2 3-5、试编写程序将BUFFER中的一个8位二进制数,转换为ASCII码表示十进制数,并按位数高低顺序放在ANSWER之下。 .................................................................................................... 3 3-6、在DATA1之下顺序存放着以ASCII码表示的十进制千位数,现欲将其转换成二进制数,试编程。 .............................................................................................................................................. 3 3-7、试编写程序将MOLT中的一个8位二进制数乘以20,乘积放在ANS单元及其下一单元中。 ...................................................................................................................................................... 4 3-8、在DATA1之下存放100个无符号8位数,试编程找出其中最大的数并将其存放在KVFF中。 ...................................................................................................................................................... 4 3-9、将BUFFER下100个8位无符号数按大小顺序排列,试编程。 ......................................... 5 3-10、在BVFF单元中有一个BCD数A,试写程序,计算Y,结果送DES单元。 ................ 5 二、练习题: .......................................................................................................................................... 7 1、显示字符HOW ARE YOU! ............................................................................................................... 7 2、ASCII码运算。求3+5=?,并且将结果显示输出。 ............................................................ 7 3、二进制数转换成ASCII码程序。 ................................................................................................ 7 4、二进制数转换成ASCII码,并显示。 ........................................................................................ 8 5、M N W分别为三个8位无符号数,求Q=N×M-W,然后将Q用16进制数显示输出。 ........ 8 6、M N W分别为三个8位无符号数,求Q=N×M-W,然后将Q用ASCII码显示输出。 .......... 9 7、编写10个字节之和,并显示结果的程序。 ............................................................................. 10
3-3、编写10个字(16位二进制数)之和的
一、课后作业题:
3-2、若1KB的数据存放再TABLE以下,试程序。
(本程序增加了,对结果的输出)
编程序将该数据块搬到NEXT之下 data segment
table db 1000 dup(?) next db 1000 dup(?) data ends stack segment para stack db 200 dup(?) stack ends code segment assume cs:code,ds:data,es:data,ss:stack start: mov ax,data mov ds,ax mov es,ax mov dx,1000 mov si,offset table mov di,offset next trsmt: mov al,[si] mov [di],al inc si inc di dec dx jnz trsmt mov ah,4ch int 21h code ends end start
data segment data_1 dw
0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh data ends stack segment para stack db 200 dup(?) stack ends code segment assume cs:code,ds:data,es:data,ss:stack start: mov ax,data mov ds,ax mov cx,10 lea si,data_1 xor ax,ax xor dx,dx
trsmt: mov bx,[si] add ax,bx adc dx,0 inc si inc si dec cx jnz trsmt push ax push dx pop bx mov ch,4 rotate1: mov cl,4
1
rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah 3-4、某16位二进制数,放在data1连续两单元中,试编写程序求其平方根和余数,将其分别放在ans和remain中。 jl printit1 add al,7h printit1: mov dl,al mov ah,2 int 21h dec ch jnz rotate1 pop bx mov ch,4 rotate2: mov cl,4 rol bx,cl mov al,bl and al,0fh
add al,30h cmp al,3ah jl printit2 add al,7h printit2: mov dl,al mov ah,2 int 21h dec ch jnz rotate2 mov ah,4ch int 21h code ends end start
data
data1 ans remain digit data stack
stack code
begin:
conti:
2
segment dw 2712h dw ? dw ? equ 200 ends
segment para stack 'stack' db 100 dup(?) ends segment
assume cs:code,ds:data,ss:stack mov ax,data mov ds,ax lea bx,data1 mov ax,[bx] mov si,ax mov di,digit mov dx,0 div di add ax,2 mov cx,ax mov ax,si mov dx,0 div cx add ax,cx shr ax,1 mov dx,ax sub dx,cx je done cmp
dx,1
je done jne conti
done: mov ans,ax mov ax,si mov dx,0 div ans
mov remain,dx mov ah,4ch int 21h code ends
end
begin
3-5、试编写程序将BUFFER中的一个8位二
进制数,转换为ASCII码表示十进制数,并按
位数高低顺序放在ANSWER之下。 data segment buffer db 0ffh answer db 3 dup(?) data ends
stack segment para stack 'stack' db 200 dup(?) stack ends code segment
assume cs:code,ds:data,es:data,ss:stack binasc: mov ax,data mov ds,ax mov es,ax
mov cx,3 xor ah,ah mov al,buffer mov bl,10
mov di,offset answer binasc1:div bl
add ah,30h
3
mov [di],ah inc di and al,al jz stop mov ah,0 loop binasc1
stop: mov ah,4ch int 21h code ends
end binasc
3-6、在DATA1之下顺序存放着以ASCII码
表示的十进制千位数,现欲将其转换成二进制
数,试编程。
data segment data1 db 37h,38h,39h,36h answer dw 1 dup(?) data ends
stack segment para stack 'stack' db 200 dup(?) stack ends code segment
assume cs:code,ds:data,es:data,ss:stack start: mov ax,data mov ds,ax mov es,ax mov si,offset data1 XOR DX,DX mov bx,10 mov cx,4 xor ax,ax
loop1: mul bx mov dl,[si]
inc si sub dl,30h ADD ax,dx dec cx JNZ loop1 mov answer,ax mov ah,4ch int 21h
code ends end start
3-7、试编写程序将MOLT中的一个8位二进制数乘以20,乘积放在ANS单元及其下一单元中。 data segment molt db 0ffh ans dw ? data ends
stack segment para stack 'stack'
db 100 dup(?) stack ends code segment
assume cs:code,ds:data,ss:stack begin: mov ax,data mov ds,ax mov ax,0ffffh mov al,molt mov bl,20 mul bl mov ans,ax mov ah,4ch int 21h code ends end begin
4
3-8、在DATA1之下存放100个无符号8位数,试编程找出其中最大的数并将其存放在KVFF中。 data segment
data1 db 0f7h,0f9h,…… kvff db ?
data ends
stack segment para stack 'stack'
db 100 dup(?) stack ends
code segment
assume cs:code,ds:data,ss:stack begin: mov ax,data mov ds,ax
mov bx,offset data1 mov al,[bx] inc bx mov cx,99
again: cmp al,[bx] jnc next mov al,[bx] next: inc bx dec cx jne again mov kvff,al mov ah,4ch int 21h
code ends
end
begin