A. cobol用到一個硬碟上的文件例如「c:\1.txt」,求JCL部分要怎麼寫,才可以使cobol打開文件
(1)首先,cobol程序可以跳開JCL,直接在cobol程序中直接指定外部文件(當然、大型開發沒有這么做的),例:
環境(ENVIRONMENT)部、INPUT-OUTPUT節、FILE-CONTROL段:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE001
ASSIGN TO 'c:\1.txt'
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS .......(後面的內容省略)
其中「FILE001」為文件標識(也就是FD定義中,和過程部OPEN/READ/CLOSE語句中的文件名).
ASSIGN TO 子句直接指定文件,不需要JCL。
(2)如果想通過JCL指定,則程序裡面,ASSIGN TO 子句如下(其他不用動):
ASSIGN TO SYS100
其中「SYS100」被稱為外部裝置名(或者稱之為「DD名」),
這樣,程序內部沒有直接指定外部文件的位置和名稱,
只是將其和外部裝置名SYS100聯繫到了一起。JCL中指定如下:
SET CBL_SYS100=c:\1.txt
注意,JCL裡面(也就是環境變數設定時)環境變數名是CBL_XXXX的形式,
XXX部分是程序中的外部裝置名。
B. 單片機匯編語言中比較指令
剛好也有這么個困惑,已經解決了,拿出來分享下
比較轉移指令
CJNZ
CJNE
A,#data,rel
CJNE
A,direct,rel
CJNE
Rn,#data,rel
CJNE
@Ri,#data,rel
第一條指令的功能是將A中的值和立即數data比較,如果兩者相等,就次序執行(執行本
指令的下一條指令),如果不相等,就轉移,同樣地,我們能將rel理解成標號,即:CJNEA,
#data,標號。這樣利用這條指令,我們就能判斷兩數是否相等,這在很多場合是非常有用的。
但有時還想得知兩數比較之後哪個大,哪個小,本條指令也具有這樣的功能,如果兩數不相等,則CPU還會反映出哪個數大,哪個數小,這是用CY(進位位)來實現的。如果前面的
數(A中的)大,則CY=0,不然CY=1,因此在程序轉移後再次利用CY就可判斷出A中的數
比data大還是小了。
例:
MOV
A,R0
CJNE
A,#10H,L1
MOV
R1,#0FFH
AJMP
L3
L1:
JC
L2
MOV
R1,#0AAH
AJMP
L3
L2:
MOV
R1,#0FFH
L3:
SJMP
L3
JC是判CY是0,還是1進行轉移,如果CY=1,則轉移到JC後面的標號處
執行,如果CY=0則次序執行(執行它的下面一條指令)。
分析一下上面的程序,如果(A)=10H,則次序執行,即R1=0。如果(A)不等於10H,則轉
到L1處繼續執行,在L1處,再次進行判斷,如果(A)>10H,則CY=1,將次序執行,即執
行MOV
R1,#0AAH指令,而如果(A)<10H,則將轉移到L2處指行,即執行MOV
R1,#0FFH
指令。因此最終結果是:本程序執行前,如果(R0)=10H,則(R1)=00H,如果(R0)>10H,
則(R1)=0AAH,如果(R0)<10H,則(R1)=0FFH。
弄懂了這條指令,其它的幾條就類似了,第二條是把A當中的值和直接地址中的值比較,第
三條則是將直接地址中的值和立即數比較,第四條是將間址定址得到的數和立即數比較,這
里就不詳談了,下面給出幾個對應的常式。
CJNE
A,10H
;把A中的值和10H中的值比較(注意和上題的區別)
CJNE
10H,#35H
;把10H中的值和35H中的值比較
CJNE
@R0,#35H
;把R0中的值作為地址,從此地址中取數並和35H比較
C. 關於 單片機中的 JC指令
jc是一個c51指令,功能是判位跳轉,舉例說明:
mov
a,#60
;送立即數到a
cjne
a,#59,l1
;將a與立即數「#59」對比,if
a>#59,acc=0;else
acc=1
.
;-------------------------------------
l1:
jc
l2
;關鍵在這里,如果acc=1,程序跳到l2處執行,否則程序往下執行
.
{....如果上面的a>59,將執行此段程序.....}
l2:........
end